难度:中等。
开始没有在循环结束后判断
r
e
s
res
res与
r
i
g
h
t
−
l
e
f
t
+
1
right - left + 1
right−left+1的关系,导致下面用例的结果错误:
在训练结束后再更新
r
e
s
res
res就好了。
class Solution {
public:
int maxTurbulenceSize(vector<int>& arr) {
int n = arr.size();
if(n == 1)return n;
int left = 0, right = 0;
int res = 1;
int flag = -1;
while(right < n - 1){
if(n - left <= res)break;
if(flag == -1){
if((left % 2 && arr[left] < arr[left + 1]) ||
(left % 2 == 0 && arr[left] > arr[left + 1])){
right++;
flag = 0;
}
else if((left % 2 && arr[left] > arr[left + 1]) ||
(left % 2 == 0 && arr[left] < arr[left + 1])){
right++;
flag = 1;
}
else{
left++;
right++;
}
}
else{
if((!flag && right % 2 && arr[right] < arr[right + 1]) ||
(!flag && right % 2 == 0 && arr[right] > arr[right + 1]) ||
(flag && right % 2 && arr[right] > arr[right + 1]) ||
(flag && right % 2 == 0 && arr[right] < arr[right + 1])){
right++;
}
else{
if(res < right - left + 1){
res = right - left + 1;
}
left = right;
flag = -1;
}
}
}
if(res < right - left + 1){
res = right - left + 1;
}
return res;
}
};