題目:給你一串數,求連續和不小於S的最小長度。
分析:貪心,DP。每次求得當前結束位置時的最小長度,然後記錄最短的即可。
這裡使用平均勢能分析法,可知時間複雜度為O(N)。
說明:看到有用二分區間長度,然互計算的O(NlgN)。
#include <cstdio>
int data[100001];
int main()
{
int n, s;
while (~scanf("%d%d",&n,&s)) {
for (int i = 0 ; i < n; ++ i)
scanf("%d",&data[i]);
int sum = 0, l = 0, r = 0, min = n+1;
while (r < n) {
sum += data[r ++];
while (sum >= s) {
if (min > r-l)
min = r-l;
sum -= data[l ++];
}
}
if (min == n+1) min = 0;
printf("%d\n",min);
}
return 0;
}