题目
https://leetcode-cn.com/problems/longest-turbulent-subarray/
动态规化
class Solution {
public int maxTurbulenceSize(int[] arr) {
int n = arr.length;
if (n < 2)
return n;
int[] increased = new int[n];
int[] decreased = new int[n];
increased[0] = 1;
decreased[0] = 1;
int res = 1;
for (int i = 1; i < n; i++) {
if (arr[i] > arr[i - 1]) {
increased[i] = decreased[i - 1] + 1;
decreased[i] = 1;
} else if (arr[i] < arr[i - 1]) {
decreased[i] = increased[i - 1] + 1;
increased[i] = 1;
} else {
increased[i] = 1;
decreased[i] = 1;
}
res = Math.max(res, Math.max(increased[i], decreased[i]));
}
return res;
}
}
双指针
class Solution {
public int maxTurbulenceSize(int[] arr) {
int n = arr.length;
if (n < 2)
return 1;
int left = 0;
int right = 1;
boolean pre = false;
int res = 1;
while (right < n) {
boolean current = arr[right - 1] < arr[right];
if (current == pre) {
left = right - 1;
}
if (arr[right - 1] == arr[right]) {
left = right;
}
right++;
res = Math.max(res, right -left);
pre = current;
}
return res;
}
}