基础训练尺取法
长度为N的序列,找一个最小连续序列使其之和>=S
双指针做法(尺取
进行sum
加和操作,当达到目标的时候前指针向后移,以此类推遍历序列
时间复杂度O(N)
#include<algorithm>
#include<cstdio>
#include<iostream>
using namespace std;
const int maxn = 1e5+10;
int t,n,s,S[maxn],sum,cnt=maxn;
int main(){
cin>>t;
while(t--){
cin>>n>>s;
for(int i = 1; i <= n; i++)
scanf("%d",&S[i]);
sum = 0;
cnt = maxn;
for(int i = 1, j = 0; i <= n;){
sum += S[i++];
while(sum >= s){
cnt = min(cnt, i - j - 1);
sum -= S[++j];
}
}
if(cnt==maxn)
cout<<0<<endl;
else
cout<<cnt<<endl;
}
return 0;
}