Longest Continuous Increasing Subsequence

Given an unsorted array of integers, find the length of longest continuous increasing subsequence (subarray).

Example 1: Input: [1,3,5,4,7] Output: 3 Explanation: The longest continuous increasing subsequence is [1,3,5], its length is 3. Even though [1,3,5,7] is also an increasing subsequence, it's not a continuous one where 5 and 7 are separated by 4.

Example 2: Input: [2,2,2,2,2] Output: 1 Explanation: The longest continuous increasing subsequence is [2], its length is 1.

Solution: Keeping track of the subsequence length

Keep track of the current increasing subsequence length.

int findLengthOfLCIS(vector<int>& nums) {
    if(nums.size() <= 1) return nums.size();

    int result = INT_MIN;
    int length = 1;
    for(int i=0; i<nums.size()-1; i++) {
        if(nums[i] < nums[i+1]) {
            length += 1;
        } else {
            length = 1;
        }
        result = max(result, length);
    }
    return result;
}

Solution: Sliding window

Every increasing subsequence is disjoint, and the boundary of each such subsequence occurs whenever nums[i] <= nums[i-1]. When it does, it marks the start of a new increasing subsequence at nums[i], and we store such i in the variable anchor.

int findLengthOfLCIS(vector<int>& nums) {
    int ans = 0, anchor = 0;
    for (int i=0; i < nums.size(); i++) {
        if (i > 0 && nums[i-1] >= nums[i]) anchor = i;
        ans = max(ans, i - anchor + 1);
    }
    return ans;
}

results matching ""

    No results matching ""