很简单的一道题,用滑动窗口秒过,每个数字进出窗口各一次,所以复杂度O(n) 。
细节参见代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF = 1000000000;
const int maxn = 100000+5;
ll T,n,m,s,a[maxn];
int main() {
while(~scanf("%lld%lld",&n,&m)) {
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
ll ans = INF, last = 1, rear = 1, cur = a[1];
while(rear <= n) {
if(rear < last) rear++,cur = a[rear];
else if(cur < m) {
rear++;
if(rear <= n) cur += a[rear];
}
else if(cur >= m) {
ans = min(ans,rear-last+1);
cur -= a[last]; last++;
}
}
printf("%lld\n",ans == INF ? 0 : ans);
}
return 0;
}