#include <cstdio>
#include <bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
int a[maxn];
int n,S;
/*
1.以i=j=0=sum=0进行初始化;
2.只要依然sum<S,就不断的将sum增加at,并将t增加1
3.如果(2)中无法满足sum>=S则终止。否则的话,更新res=min(res,i-j)
4.将sum减去aj(开头的元素),s增加1然后回到(2)
*/
int solve()
{
int i,j; int sum=0;
i=j=0;
int res=n+1;
while(1){
while(sum<S&&i<n){
sum+=a[i++];
}
if(sum<S) break;
res=min(res,i-j);
sum-=a[j++];
}
if(res>n) {res=0;}//解不存在
return res;
}
int main()
{
scanf("%d %d",&n,&S);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
printf("%d\n",solve());
}
尺取法。。。。
最新推荐文章于 2020-07-20 22:12:23 发布