题目:
给定长度为n的数列整数a0,a1,……an-1以及整数S。求出总和不小于S的连续子序列的长度的
最小值。如果解不存在,则输出0。
输入:
n=10
s=15
a=(5 1 3 5 10 7 4 9 2 8)
输出:
2 (5+10)
个人理解:
尺取法的运用,主要了解起点与终点的变化关系以及条件。
<br><br>代码:<br>
#include<stdio.h>
int min(int x,int y){
if(x>y)
return y;
return x;
}
int main(){
int a[100000];
int N;
scanf("%d",&N);
while(N--){
int n,x=0,y=0,mi,s,sum=0;
scanf("%d%d",&n,&s);
mi=n+1;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<2*n&&x<=y;i++){
while(sum<s&&y<n){
sum=sum+a[y++];
}
if(sum<s)
break;
mi=min(mi,y-x);
sum=sum-a[x++];
}
if(mi>n){
mi=0;
}
printf("%d\n",mi);
}
}