Skip to content

3105. Longest Strictly Increasing or Strictly Decreasing Subarray

Description

You are given an array of integers nums. Return the length of the longest subarray ofnums which is either strictly increasing or strictly decreasing.

 

Example 1:

Input: nums = [1,4,3,3,2]

Output: 2

Explanation:

The strictly increasing subarrays of nums are [1], [2], [3], [3], [4], and [1,4].

The strictly decreasing subarrays of nums are [1], [2], [3], [3], [4], [3,2], and [4,3].

Hence, we return 2.

Example 2:

Input: nums = [3,3,3,3]

Output: 1

Explanation:

The strictly increasing subarrays of nums are [3], [3], [3], and [3].

The strictly decreasing subarrays of nums are [3], [3], [3], and [3].

Hence, we return 1.

Example 3:

Input: nums = [3,2,1]

Output: 3

Explanation:

The strictly increasing subarrays of nums are [3], [2], and [1].

The strictly decreasing subarrays of nums are [3], [2], [1], [3,2], [2,1], and [3,2,1].

Hence, we return 3.

 

Constraints:

  • 1 <= nums.length <= 50
  • 1 <= nums[i] <= 50

 

Solutions

Solution: Brute Force

  • Time complexity: O(n)
  • Space complexity: O(1)

 

JavaScript

js
/**
 * @param {number[]} nums
 * @return {number}
 */
const longestMonotonicSubarray = function (nums) {
  const n = nums.length;
  let state = '';
  let length = 1;
  let result = 1;

  for (let index = 1; index < n; index++) {
    const prevNum = nums[index - 1];
    const num = nums[index];

    if (num === prevNum) {
      length = 1;
      state = '';
    } else if (num > prevNum) {
      length = state === 'increase' ? length + 1 : 2;
      state = 'increase';
    } else {
      length = state === 'decrease' ? length + 1 : 2;
      state = 'decrease';
    }
    result = Math.max(length, result);
  }
  return result;
};

Released under the MIT license