--- tags: data_structure_python --- # Longest Turbulent Subarray 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 <= A.length <= 40000 - 0 <= A[i] <= 10^9 # Solution ### Solution 1: Sliding window (Dynamic) ```python= class Solution: def maxTurbulenceSize(self, A: List[int]) -> int: m, beg, end = len(A), 0, 0 last_diff, maxi = 0, -float("inf") while end < m-1: curr_diff = A[end] - A[end+1] # If both are same sign, there is no turbulence. if (last_diff ^ curr_diff) >= 0: beg = end if curr_diff == 0: # Case: [9,9] beg = end + 1 end += 1 maxi = max(maxi, end-beg+1) last_diff = curr_diff return maxi if maxi != -float("inf") else m ``` ![](https://i.imgur.com/zlEa0eR.png)