【试题描述】
给定长度为n的正整数数列A(A1, A2, ... , An)以及正整数S,求出总和不小于S的连续子序列的长度的最小值。如果解不存在,则输出0。
【输入】
第一行两个整数N和S,第二行包括n个正整数表示数列A,两两之间用空格分隔。
【输出】
一个符合题目要求的整数。
【输入示例】
5 11
1 2 3 4 5
【输出示例】
3
【其他说明】
数据范围:10 < N < 10^5,0 < Ai < 10^4+1,S < 10^8.
【思路】
先往前面加数,如果总和大了从后边减数,通过记录每组数据比较大小得出最优的解
【代码】
#include<iostream>
#include<algorithm>
using namespace std;
int a[100000];
int main()
{
int n,s,sum=0,cnt=0,cntt=INT_MAX;
int i,j;
cin>>n>>s;
for(i=0;i<n;i++)
cin>>a[i];
i=0;j=0;
sum=a[0];
cnt=1;
while(i<=j&&j<n)
{
if(sum<s)
{
j++;
sum+=a[j];
cnt++;
}
else
{
cntt=min(cnt,cntt);
sum-=a[i];
cnt--;
i++;
}
}
if(cntt==INT_MAX)
{
cout<<0;
}
else cout<<cntt;
return 0;
}