LeetCode 978. 最长湍流子数组

题目描述:
当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:

若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];
或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。
也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。

返回 A 的最大湍流子数组的长度。

思路:
子数组要求是连续的;
定义一个down和一个up
每次遍历一个数时:如果是减少的时候,则down=up+1; up=1;(恢复原状)
如果增加的时候,则up=down+1; down=1;(恢复原状);
如果相等的时候,两个都恢复原状;down=1,up=1;
求出此时的最大长度

代码如下:

class Solution {
     
public:
    int maxTurbulenceSize(vector<int>& A) {
     
        if(A.size()<1)     return 0;
        else if(A.size()==1)    return 1;
        int res=1;
        int down=1,up=1;
        for(int i=1;i<A.size();i++){
     
            if(A[i-1]<A[i]){
     
                up=down+1;
                down=1;
            }
            else if(A[i-1]>A[i]){
     
                down=up+1;
                up=1;
            }
            else {
     
                down=1;
                up=1;
            }
            res=max(res,max(up,down));
        }
        return res;
    }
};

你可能感兴趣的:(leetcode,leetcode,数据结构,算法,动态规划,c++)