subsequence
题目链接:
https://ac.nowcoder.com/acm/problem/107658
中文:
给定长度为n的正整数数列以及整数S,求出总和不小于s的连续字串的长度的最小值,如果不存在,输出0
思路:
尺取法,双指针
如果s[i]-s[j]刚大于等于s了,就没有必要往后移动j了
移动i
#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn=1e5+7;
const int inf=1e9;
int main()
{
int t,n,s,a[maxn];
scanf("%d",&t);
while(t--)
{
for(int i=0;i<=100007;i++)
a[i]=0;
int q;
scanf("%d %d",&n,&s);
for(int i=1;i<=n;i++)
{
scanf("%d",&q);
a[i]=a[i-1]+q;
}
int r=1;
int ans=inf;
for(int i=1;i<=n;i++)
{ //要注意r的范围
while(r<n&&a[r]-a[i-1]<s)
r++;
if(r<=n&&a[r]-a[i-1]>=s)
{ans=min(ans,r-i+1);
}
}
if(ans==inf)
printf("0\n");
else
printf("%d\n",ans);
}
}
浙公网安备 33010602011771号