题意:
n个序列,求长度最小的连续序列使得其和》s
思路:
学会了一种新的方法—-尺取法 , 用到这里感觉恰到好处,很好用。
控制好左右边界,一边扫描一边挪,保留最小值即可。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
int arr[100005];
int main() {
int n, s;
while (~scanf("%d%d", &n, &s)) {
int i,j;
for (i = 0; i < n; i++)
scanf("%d", &arr[i]);
int L=0, R=0, cnt=n+1,sum=0;
while (R<n) {
sum += arr[R++];
while(sum>=s) {
cnt = min(cnt, R - L);
sum -= arr[L++];
}
}
if (cnt == n + 1)
cnt = 0;
printf("%d\n",cnt);
}
return 0;
}