poj 3061 时间复杂度为O(n)

来源:互联网 发布:淘宝智能二手手机 编辑:程序博客网 时间:2024/05/17 12:02
//尺取法,复杂度为O(n) #include <iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int maxn=100000+5;int a[maxn];int main(){    int t;    scanf("%d",&t);    while(t--)    {        int n,s;        scanf("%d%d",&n,&s);        for(int i=0;i<n;i++)              scanf("%d",&a[i]);        int res=n+1;        int f=0,e=0,sum=0;                  //f为上界,e为下界        for(;;)        {            while(e<n&&sum<s)                     sum+=a[e++];            if(sum<s) break;            res=min(res,e-f);            sum-=a[f++];        }        if(res>n) res=0;        cout<<res<<endl;    }    return 0;}
原创粉丝点击