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

相关推荐

爱吃肉的伊登在写日记:好棒,27届简历能做成这个样子,但是第一个项目感觉cover住难度还是不小的,特别是二面的时候肯定要对分布式系统设计这一块儿有高出正常面试者的水平才行
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务