978. Longest Turbulent Subarray
class Solution {
public:
int maxTurbulenceSize(vector<int>& arr) {
if(arr.size() == 1) return 1;
int tag = 1;
int ans = 0;
for(int l = 0, r = 1; r < arr.size(); r++) {
tag = (arr[r] - arr[r - 1]) > 0 ? 1 : -1;
if(arr[r] == arr[r - 1]) l = r;
tag = r % 2 == l % 2 ? tag : -tag;
while(l + 1 < r && (arr[l] - arr[l+1]) * tag <= 0) l++, tag *= -1;
if(l + 1 == r && arr[l] == arr[r]) l++;
ans = max(ans, r - l + 1);
}
return ans;
}
};