题目描述 时间:1s 空间:256M 题目描述: 给定一个含有 � n 个整数的数组和一个整数 � s ,找出该数组中满足其和 ≥ � ≥s 的长度最小的连续子数组。
如果不存在符合条件的连续子数组,输出 0 0。
输入格式: 第一行包含一个整数 � T,表示测试数据组数。
对于每组测试数据,
第一行包含两个整数 � n, � s。
接下来包含 � n 个整数 � � a i
输出格式: 对于每组测试数据,输出一个整数表示答案。
样例1输入:
3
8 7
2 3 1 2 0 4 3 0
8 100
2 3 1 2 0 4 3 0
3 0
1 1 1
样例1输出: 2
0
1
保证
对于样例1的第一组测试数据:子数组下标是 [ 6 , 7 ],所以答案为 2。
#include<bits/stdc++.h>
using namespace std;
long long t,n,s;
int main(){
cin>>t;
for(int i=1;i<=t;i++){
long long s,a[400000],l=1,r=1,minn=100000010;
a[0]=0;
cin>>n>>s;
for(int j=1;j<=n;i++){
cin>>s;
a[j]=a[j-1]+s;
}
while(l<=n){
if(a[r]-a[l-1]>=s){
if(r-l+1<minn)
minn=r-l+1;
if(l<r) l++;
else r++;
}else r++;
}
if(minn==1000000100) cout<<0;
else cout<<minn;
}
return 0;
}