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;
}