Skip to main content
Back to problems
#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)
LeetCode
solution.rs
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
  }
}