思路:最大连续子数组->slide windows
flag[i]:等于1表示i-1到i增大 -1表示减小 0表示不变。
具体思路:
flag[r] == 0: l = r
flag[r] == 1 && flag[r - 1] == -1:l不动
flag[r] == -1 && flag[r - 1] == 1:l不动
其他:l = r - 1
class Solution {
public:
int maxTurbulenceSize(vector<int>& arr) {
int n = arr.size();
vector<int> flag(n);
for (int i = 1; i < n; ++i) {
if (arr[i] > arr[i - 1]) flag[i] = 1;
else if (arr[i] < arr[i - 1]) flag[i] = -1;
else flag[i] = 0;
}
int l = 0, ans = 1;
for (int r = 1; r < n; ++r) {
if (flag[r] == 0) l = r;
else if (flag[r] == flag[r - 1]) l = r - 1;
ans = max(ans, r - l + 1);
}
return ans;
}
};