最长湍流子数组

问题描述与解题思路

题目链接

确定本题的状态表示

f[i]的含义是以nums[i]为终点的最大湍流子数组长度

确定本题的状态转移方程

if(nums[i]==nums[i-1]) {
    f[i]=1;
}
else if((long long) (nums[i]-nums[i-1])*(nums[i-1]-nums[i-2])<0)
    f[i]=f[i-1]+1;
else{
    f[i]=2;
}

填表求值

根据初始条件和状态转移方程,确定填表顺序,进而逐步填满dp表,最终返回题目要的结果

代码实现

class Solution {
public:
    int maxTurbulenceSize(vector<int>& nums) {
        int n=nums.size();
        if(n<2) return n;
        if(n==2){
            if(nums[0]==nums[1])return 1;
            else return 2;
        }
        vector<int> f(n);
        // f[i]的含义是以nums[i]为终点的最大湍流子数组长度
        f[0]=1;f[1]=2;
        int ret=0;
        for(int i=2;i<n;i++){
            if(nums[i]==nums[i-1]) {
                f[i]=1;
            }
            else if((long long) (nums[i]-nums[i-1])*(nums[i-1]-nums[i-2])<0)
                f[i]=f[i-1]+1;
            else{
                f[i]=2;
            }
            ret=max(ret,f[i]);
        }
        return ret;
    }
};
posted @ 2025-09-26 06:58  烧冻鸡翅QAQ  阅读(4)  评论(0)    收藏  举报  来源