题解 | 游游的最长稳定子数组
游游的最长稳定子数组
https://www.nowcoder.com/practice/ea7098b7960348f6915e252f0c4debcc
如果本题是子数组,那么就是一个动态规划的题型,要通过dp去得出每一个位置最长的子数组的值,最后得出答案,但本题是连续子数组,那么只需从头到尾遍历一遍即可,ans是最后的结果,leng是到达当前位置的最长连续子数组,当遇到不满足题目要求的位置时,将ans更新为max(ans,leng),然后重置leng,最终遍历一次后所得到的ans就是最长稳定连续子数组,要注意,如果遍历到了倒数第二个位置,仍满足条件,让leng++,那么就要结束了,要注意更新ans,时间复杂度为O(n);
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
ll n;cin>>n;
vector<ll> a(n+1);
for(int i=1;i<=n;++i) cin>>a[i];
ll ans=1,leng=1;
for(int i=1;i<n;++i){
if(abs(a[i+1]-a[i])<=1){
leng++;
}else{
ans=max(ans,leng);
leng=1;
}
if(i==(n-1)){
ans=max(ans,leng);
}
}
cout<<ans<<endl;
}