题目描述
给定一个未经排序 的整数数组 nums ,找到最长连续递增子序列 的长度。 连续递增子序列,必须是数组里相邻元素连续、并且严格递增(\(numsi-1 < numsi\))。
注意:和「最长递增子序列 LIS」区分! LIS 可以不连续;本题 LCIS 要求下标连续,难度低很多,滑动窗口秒杀。

思路讲解(滑动窗口)
left:当前连续递增区间左边界下标right:当前连续递增区间右边界下标- 窗口定义:\(left, right\),闭区间
- 如果
nums[right-1] < nums[right]:还在递增,right直接右移,窗口扩大 - 如果不满足递增:递增序列断掉,先记录当前窗口最大值 ,然后把
left移动到right,开启全新窗口(贪心)将left直接移动到right,而不是一格一格加 - 循环跑完之后,数组最后一段递增区间还没结算,需要额外比较一次
- 最后
return ret-1:因为窗口是闭区间[left,right],元素个数 =right-left+1,但是我们的right在循环结束后多走了一步,所以结果需要 - 1
cpp
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
int n=nums.size();
if(n==0)
{
return 0;
}
int left=0,right=1;
int ret=0;
while(right<n)
{
if(nums[right-1]<nums[right])
{
;
}
else
{
ret=ret>right-left+1?ret:right-left+1;
left=right;
}
right++;
}
ret=ret>right-left+1?ret:right-left+1;
return ret-1;
}
};