题解 | 游游的最长稳定子数组

游游的最长稳定子数组

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;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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