题解
双指针
其实就是暴力吧,想好各种可能的情况,左右两个·指针,如果满足,右指针右移一个,如果不满足,左指针要变为右指针重新计算。注意的是左右指针相同的情况下,需要判断和下一个数是否相同,如果相同那么左指针和右指针仍需要右移一次,如果不相同那么仍满足条件,只需要右指针右移即可。
代码
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;
}
};

本文介绍了如何使用双指针方法解决找到数组中最大湍流子数组长度的问题。通过分析不同情况,当右指针移动时判断相邻元素关系,更新最大子数组长度。在左右指针相等时,需要判断下一个数是否相同,从而确定指针的移动方式。代码实现清晰地展示了整个算法过程。
1570

被折叠的 条评论
为什么被折叠?



