题解
双指针
其实就是暴力吧,想好各种可能的情况,左右两个·指针,如果满足,右指针右移一个,如果不满足,左指针要变为右指针重新计算。注意的是左右指针相同的情况下,需要判断和下一个数是否相同,如果相同那么左指针和右指针仍需要右移一次,如果不相同那么仍满足条件,只需要右指针右移即可。
代码
class Solution {
public:
int maxTurbulenceSize(vector<int>& arr) {
int n = arr.size();
int ret = 1;
int left = 0,right = 0;
while(right < n-1){
if(left == right){//考虑只有一个数的情况下,右指针肯定要右移
if(arr[left] == arr[left + 1]){//当下一个数还是相同的情况下,即左右指针都要右移
left++;
}
right++;
}else{
if(arr[right - 1] < arr[right] && arr[right] > arr[right + 1]){
right++;
}else if(arr[right - 1] > arr[right] && arr[right] < arr[right + 1]){
right ++;
}
else{
left = right;
}
}
ret = max(ret,right - left + 1);
}
return ret;
}
};