Longest Turbulent Subarray

update Feb 13 2019, 1:53

LeetCodearrow-up-right

A subarray A[i], A[i+1], ..., A[j] of A is said to be turbulent if and only if:

For i <= k < j, A[k] > A[k+1] when k is odd, and A[k] < A[k+1] when k is even; OR, for i <= k < j, A[k] > A[k+1] when k is even, and A[k] < A[k+1] when k is odd. That is, the subarray is turbulent if the comparison sign flips between each adjacent pair of elements in the subarray.

Return the length of a maximum size turbulent subarray of A.

Example 1:

Input: [9,4,2,10,7,8,8,1,9]
Output: 5
Explanation: (A[1] > A[2] < A[3] > A[4] < A[5])

Example 2:

Input: [4,8,12,16]
Output: 2

Example 3:

Input: [100]
Output: 1

Note:

  1. 1 <= A.length <= 40000

  2. 0 <= A[i] <= 10^9

Basic Idea:

这道题就是求最长的一增一减的subarray长度。我们可以利用DP的思路,维持两个数组,每个index i分别表示以A[i] 为较大值和较小值结尾的最长符合条件subarray的长度。最后返回值就是所有长度中的最大值。

Java Code:

Last updated