Subsequence

Subsequence

https://ac.nowcoder.com/acm/problem/107658

//Subsequence
//尺取法 
#include <iostream> 
#include <cstring>
#include <cstdio>
using namespace std;
int a[1000010];//定义输入数组 
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
    int n,i,r,j,flag=0,minn;
    int flag1=0;//标记第一次遇到符合条件的序列 
    memset(a,0,sizeof(a));
    cin>>n>>r;
    for(i=1;i<=n;i++)    { cin>>a[i];if(i>1) a[i]+=a[i-1];}//一边输入,一边转化为前缀和 
    int sum=0,p=0;
    for(i=1;i<=n;i++)//后指针 
    {
    for(j=p+1;j<i;j++)//前指针 
    {
        if(a[i]-a[j]>=r)//如果找到符合条件的序列 
        {
        if(!flag)    {flag=1;minn=i-j;}//第一次找到,先给最小长度minn赋值 
        else if(i-j<minn)    minn=i-j;//非第一次找到,更新最小长度minn
        p=j;//标记前指针j的位置,下次直接从j后面的一个位置搜索 
        }
        else    break;//若不符合直接退出,因为再往后移和只会变小 
    }
    }
    if(!flag)    cout<<"0"<<endl;//若找不到符合条件的,输出0 
    else cout<<minn<<endl;//输出最小长度 
    }
}
全部评论
这样写双指针也很清晰,棒啊!
点赞 回复 分享
发布于 2021-02-26 15:00

相关推荐

皮格吉:不,有的厂子面试无手撕,可以试试。都是一边学一边面。哪有真正准备好的时候,别放弃
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务