LeetCode:978. 最长湍流子数组
题型: 376. 摆动序列
思路:
- 滑动窗口-双指针
- dp
a. 这个dp 的状态转移有股票系列的那味了.
图解:
(图1-1)
AC Code DP解法
class Solution {
public int maxTurbulenceSize(int[] arr) {
int len = arr.length;
int[] up = new int[len], down = new int[len];
Arrays.fill(up, 1);
Arrays.fill(down, 1);
int ans = 1;
// 遍历
for(int i = 1; i < len; i++) {
if(arr[i] > arr[i - 1]) {
// 上升
up[i] = down[i - 1] + 1;
ans = Math.max(up[i], ans);
} else if(arr[i] < arr[i - 1]) {
// 下降
down[i] = up[i - 1] + 1;
ans = Math.max(down[i], ans);
}
}
return ans;
}
}
AC Code 双指针解法
class Solution {
public int maxTurbulenceSize(int[] arr) {
int len = arr.length;
int left = 0, right = 1, ans = 1;
int cnt = 0;
while(right < len) {
if(cnt < 1 &&arr[right] > arr[right - 1]) {
cnt = 1;
} else if(cnt > -1 && arr[right] < arr[right - 1]) {
cnt = -1;
} else {
ans = Math.max(ans, right - left);
cnt = 0;
// 如果相等
if(arr[right] == arr[right - 1]) {
left = right;
} else {
// 不相等
left = right - 1;
right--;
}
}
right++;
}
ans = Math.max(ans, right - left);
return ans;
}
}
(图1-1): 引用自 https://leetcode-cn.com/problems/longest-turbulent-subarray/solution/yi-zhang-dong-tu-xiang-jie-dong-tai-gui-wrwvn/ 文章