当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:
若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];
或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。
也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。
返回 A 的最大湍流子数组的长度。
解法:滑动窗口
class Solution:
def maxTurbulenceSize(self, arr: List[int]) -> int:
length = len(arr)
if length == 1:
return 1
left, right = 0, 1
ans = -1
while right < length:
if right < length - 1 and (arr[right] - arr[right - 1]) * (arr[right] - arr[right + 1]) > 0:
right += 1
else:
if arr[right] == arr[right - 1]:
ans = max(ans, right - left)
else:
ans = max(ans, right - left + 1)
left = right
right += 1
return ans