题解 | #最长和谐连续子序列#
最长和谐连续子序列
http://www.nowcoder.com/practice/36d7037abcad45228d859c28d522fd9c
- 滑动窗口。
#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; }
大厂笔试题题解 文章被收录于专栏
主要是公司笔试题得一些总结