Skip to main content

Longest Continuous Increasing Subsequence

Problem

Given an unsorted array of integers nums, return the length of the longest continuous increasing subsequence (i.e. subarray). The subsequence must be strictly increasing.

A continuous increasing subsequence is defined by two indices l and r (l < r) such that it is [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] and for each l <= i < r, nums[i] < nums[i + 1].

 

Example 1:

Input: nums = [1,3,5,4,7]
Output: 3
Explanation: The longest continuous increasing subsequence is [1,3,5] with length 3.
Even though [1,3,5,7] is an increasing subsequence, it is not continuous as elements 5 and 7 are separated by element
4.

Example 2:

Input: nums = [2,2,2,2,2]
Output: 1
Explanation: The longest continuous increasing subsequence is [2] with length 1. Note that it must be strictly
increasing.

 

Constraints:

  • 1 <= nums.length <= 104
  • -109 <= nums[i] <= 109

Solution

/**
* @param {number[]} nums
* @return {number}
*/
var findLengthOfLCIS = function(nums) {
if (!nums.length) {
return 0;
}
let max = 1;
let dp = Array(nums.length).fill(1);
for (let i = 1; i < nums.length; ++i) {
if (nums[i - 1] < nums[i]) {
dp[i] = dp[i - 1] + 1;
max = Math.max(dp[i], max);
}
}
return max;
};

We will implement a DP solution. Let dp[i] be the longest continuous subsequence ending and including nums[i].

  • For the base case, if i = 0, then dp[0] = 1, since subsequence ends at the first element of nums.
  • For the recursive case, if the current value nums[i] is greater than the previous value nums[i - 1], the longest continuous subsequence ending at the current value is the previous longest subsequence plus 1; otherwise the subsequence will only contain nums[i], which has length 1.