Back to all solutions

#978 - Longest Turbulent Subarray

Problem Description

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

/**
 * @param {number[]} arr
 * @return {number}
 */
var maxTurbulenceSize = function(arr) {
  let result = 1;
  let inc = 1;
  let dec = 1;

  for (let i = 1; i < arr.length; i++) {
    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;
    }
    result = Math.max(result, inc, dec);
  }

  return result;
};