题解 | #最长和谐连续子序列#
最长和谐连续子序列
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;
} 大厂笔试题题解 文章被收录于专栏
主要是公司笔试题得一些总结

查看4道真题和解析