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