题目链接
英文链接:https://leetcode.com/problems/longest-turbulent-subarray/
中文链接:https://leetcode-cn.com/problems/longest-turbulent-subarray/
题目详述
当 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 的最大湍流子数组的长度。
示例 1:
1 | 输入:[9,4,2,10,7,8,8,1,9] |
示例 2:
1 | 输入:[4,8,12,16] |
示例 3:
1 | 输入:[100] |
提示:
- 1 <= A.length <= 40000
- 0 <= A[i] <= 10^9
题目详解
- LeetCode376-摆动序列 求的是摆动的最长子序列,而本题是求摆动的最长子数组。子序列不要求连续,子数组要求连续。解题思路是一致的。
- 运用两个变量
up
和down
来表示到此处是上升或下降。 - 如果
A[i] > A[i - 1]
,则up = down + 1
,因为要保持连续,还需要使down = 1
。 - 如果
A[i] < A[i - 1]
,则down = up + 1
,因为要保持连续,还需要使up= 1
。 - 如果
A[i] == A[i - 1]
,则down = 1
,up= 1
。
1 | public class LeetCode_00978 { |