LeetCode 978 最长湍流子数组

LeetCode 978 最长湍流子数组

🟡 中等 https://leetcode.cn/problems/longest-turbulent-subarray/description/

子数组思考动态规划,分类:dp是问题的答案吗?不是,dp的含义应该是以i结尾的子数组的湍流长度。

这里是按结尾分,显然只需要维护两个变量即可:前一个位置的count和方向。

class Solution {

public:

    int maxTurbulenceSize(vector<int>& arr) {

        if (arr.size() == 1) return 1;

        int maxLength = 1;

        int currentLength = 1;

        int direction = 0; // 0: 未定义, 1: 增加, -1: 减少

        for (int i = 1; i < arr.size(); ++i) {

            if(direction<0&&arr[i]-arr[i-1]>0||direction>0&&arr[i]-arr[i-1]<0){

                currentLength = 1+currentLength;

                direction = arr[i]>arr[i-1]?1:-1;

            }else if(arr[i]==arr[i-1]){

                currentLength = 1;

                direction = 0;

            }else{

                currentLength = 2;

                direction = arr[i]>arr[i-1]?1:-1;

            }

            maxLength = max(maxLength, currentLength);

        }

        return maxLength;

    }

};