用二维数组 B来记录之前比较的长度
public int maxTurbulenceSize(int[] A) {
if (A == null || A.length == 0) return 0;
if (A.length == 1) return 1;
int res = 0;
int[][] B = new int[A.length][2];
B[0][1] = B[0][0] = 1;
for (int i = 1; i < A.length; i++) {
if (A[i - 1] > A[i]) {
// A[i-2] < A[i-1] > A[i]
// 即 B[i-1][1] = A[i-1]>A[i-2] 的长度
B[i][0] = B[i - 1][1] + 1;
B[i][1] = 1;
} else if (A[i - 1] < A[i]) {
B[i][0] = 1;
// A[i-2] > A[i-1] < A[i]
// 即 B[i-1][0] = A[i-1]<A[i-2] 的长度
B[i][1] = B[i - 1][0] + 1;
}else{
// A[i-1] = A[i],无法延长
B[i][0] = B[i][1] = 1;
}
res = Math.max(res, Math.max(B[i][0],B[i][1]));
}
for(int[] a:B) {
System.out.println(Arrays.toString(a));
}
return res;
}
因为B数组前面的数据都没有用到,所以可以优化成类似: https://leetcode.com/problems/longest-turbulent-subarray/discuss/221935/Java-O(N)-time-O(1)-space 的代码