题解 | #最长和谐连续子序列#

最长和谐连续子序列

http://www.nowcoder.com/practice/36d7037abcad45228d859c28d522fd9c

  1. 滑动窗口。
#include<bits/stdc++.h>

using namespace std;

int getmax(list<int> a){
    int max_ =0;
    for(auto it = a.begin(); it!=a.end();it++){
        max_ = max(max_,*it);
    }

    return max_;
}


int getmin(list<int> a){
    int min_ =INT_MAX;
    for(auto it = a.begin(); it!=a.end();it++){
        min_ = min(min_,*it);
    }

    return min_;
}

int main(){
    vector<int> v;
    int x;
    while(cin>>x){
        v.push_back(x);
    }
    int max_ = 0;
    int max1 = v[0], min1 = v[0]//刚开始的额最值赋值
    list<int> window;//list 可以直接删除左边的。可以更好的来表示这个窗口
    window.push_back(v[0]);//第一个元素先放入


    for(int j = 1;j<v.size();j++){
        window.push_back(v[j]);//每次立马放入该元素,然后在判断
        if(v[j]>max1) max1 = v[j];//时时跟新最大值最小值。
        if(v[j]<min1) min1 = v[j];

        while(max1-min1>1){//开始左移动,注意循环处理 15 15 15 15 15 21 22的情况。
            window.pop_front();
            max1 = getmax(window);//重新获取对应的值
            min1 = getmin(window);
        }

        if(max1-min1==1){//满足条件
            int a = window.size();//循环最大取
            max_ = max(max_,a);
        }

    }


    cout<<max_<<endl;
    return 0;

}
大厂笔试题题解 文章被收录于专栏

主要是公司笔试题得一些总结

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务