最长和谐连续子序列

图片说明

#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
using namespace std;
typedef long long ll;
const int maxn=5010;//数组所开最大值
const int mod=1e9+7;//模
const int inf=0x3f3f3f3f;//无穷大
int main()
{

    int nums[20010];
    int n = 0;
    char c;
    while((c=getchar())!='\n')
    {
        if(c>='0'&&c<='9')
        {
            ungetc(c,stdin);
            cin>>nums[n++];
        }
    }
    if(n == 1)
    {
        cout << 0 << endl;
        return 0;
    }
    int i = 0;
    int j = 1;
    int res  = 0;
    int maxx = nums[0];
    int minn = nums[0];
    while(i < n && j < n)
    {
        if((abs(maxx - nums[j]) <= 1) && (abs(minn - nums[j]) <= 1)) ///2 2 3 4 3 2
        {   minn = min(minn,nums[j]);
            maxx = max(maxx,nums[j]);
            //cout << "max:" << maxx << " minn:" << minn << endl;
            //cout << "i:" << i <<" j:" << j <<endl;
            //cout << "======" <<endl;
            if(maxx - minn != 0)
                res = max(res,j - i);
            j ++;

        }
        else
        {
            if(maxx - minn == 1) // 5 12 9 9 9 9 9 9 9 9 9 9
                res = max(res,j - i);
                i ++;
                j = i + 1;
                maxx = nums[i];
                minn = nums[i];
        }
    }
    if(maxx - minn == 1) /// 2222
        res = max(res,j - i);
    cout <<res << endl;
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 16:22
主包是26应届生,投大厂简历一直过不了初筛,想问问大家有必要花钱改简历吗
Java抽象带篮子:我之前专门发个帖子说不要付费改简历的,里面还详细写了简历怎么写,你可以去看看
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-26 14:50
人力小鱼姐:有后面墨迹那两句的时间问题早回答完了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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