# Longest Turbulent Subarray Problem

## Description

LeetCode Problem 978.

Given an integer array arr, return the length of a maximum size turbulent subarray of arr. A subarray is turbulent if the comparison sign flips between each adjacent pair of elements in the subarray.

More formally, a subarray [arr[i], arr[i + 1], …, arr[j]] of arr is said to be turbulent if and only if:

• For i <= k < j:
• arr[k] > arr[k + 1] when k is odd, and
• arr[k] < arr[k + 1] when k is even.
• Or, for i <= k < j:
• arr[k] > arr[k + 1] when k is even, and
• arr[k] < arr[k + 1] when k is odd.

Example 1:

``````1
2
3
Input: arr = [9,4,2,10,7,8,8,1,9]
Output: 5
Explanation: arr[1] > arr[2] < arr[3] > arr[4] < arr[5]
``````

Example 2:

``````1
2
Input: arr = [4,8,12,16]
Output: 2
``````

Example 3:

``````1
2
Input: arr = [100]
Output: 1
``````

Constraints:

• 1 <= arr.length <= 4 * 10^4
• 0 <= arr[i] <= 10^9

## Sample C++ Code

``````1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
int maxTurbulenceSize(vector<int>& arr) {
int n = arr.size();
if (n < 2) return n;

int total = 1, maxim = 0;

for (int i = 1; i < n; i++) {
if (arr[i] != arr[i-1]) total++;

while (i < n-1 && (arr[i] - arr[i-1]) / 10000.0 * (arr[i] - arr[i+1]) / 10000.0 > 0) {
//division by 10000.0 to avoid integer overflow.
total++;
i++;
}
maxim = max(total,maxim);
total = 1;
}
return maxim;
}
};
``````