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
/**
* @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;
};