#978
Medium Algorithms Longest turbulent subarray
Array Dynamic Programming Sliding Window
48.9% acceptance
Feb 25, 2026
2114
259
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.
Solution
Rust
Time O(n)
Space O(1)
impl Solution {
pub fn max_turbulence_size(arr: Vec<i32>) -> i32 {
let n = arr.len();
if n < 2 { return n as i32; }
let mut ans = 1;
let mut inc = 1; // length ending here with last move up
let mut dec = 1; // length ending here with last move down
for i in 1..n {
if arr[i] > arr[i-1] { inc = dec + 1; dec = 1; }
else if arr[i] < arr[i-1] { dec = inc + 1; inc = 1; }
else { inc = 1; dec = 1; }
ans = ans.max(inc).max(dec);
}
ans
}
}