目录
题目描述
给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回其长度。连续递增子序列的定义是:子序列中的元素严格递增且在原数组中连续。
示例 1:
输入:nums = [1,3,5,4,7]
输出:3
解释:最长连续递增子序列是 [1,3,5],长度为 3。
示例 2:
输入:nums = [2,2,2,2,2]
输出:1
解释:最长连续递增子序列是 [2],长度为 1。
提示:
-
数组长度范围为
[1, 10^4]
。 -
元素值范围为
[-10^9, 10^9]
。
解题思路
要找到最长的连续递增子序列,可以通过遍历数组并比较相邻元素的值来实现。具体步骤如下:
-
初始化变量 :维护两个变量
max
(记录最长长度)和count
(记录当前递增序列的长度)。初始时,count
设为 1(单个元素视为长度为 1 的序列)。 -
遍历数组:从第一个元素开始,依次比较当前元素与下一个元素:
-
若当前元素小于下一个元素,说明递增,
count
加 1。 -
否则,说明递增中断,更新
max
为当前最大值,并重置count
为 1。
-
-
处理边界 :遍历结束时,可能未处理最后一个递增序列,因此在循环结束后需再次更新
max
。
代码实现
var findLengthOfLCIS = function(nums) {
let max = 0;
let count = 1;
for (let i = 0; i < nums.length; i++) {
if (nums[i] < nums[i + 1]) {
count++;
} else {
max = Math.max(max, count);
count = 1;
}
}
return max;
};
测试用例与结果
测试用例 1:
console.log(findLengthOfLCIS([1, 3, 5, 4, 7])); // 输出: 3
分析:
最长连续递增子序列为 [1, 3, 5]
,长度为 3。
测试用例 2:
console.log(findLengthOfLCIS([2, 2, 2, 2, 2])); // 输出: 1
分析:
所有元素相同,最长连续递增子序列长度为 1。
测试用例 3:
console.log(findLengthOfLCIS([1, 2, 3, 4, 5])); // 输出: 5
分析:
整个数组严格递增,最长连续递增子序列长度为 5。
测试用例 4:
console.log(findLengthOfLCIS([5])); // 输出: 1
分析:
数组长度为 1,最长连续递增子序列长度为 1。
复杂度分析
-
时间复杂度: O(n),仅需遍历数组一次。
-
空间复杂度: O(1),仅使用常数级别的额外空间。
总结
通过遍历数组并动态维护当前递增序列的长度,能够高效地找到最长连续递增子序列的长度。该方法简洁且时间复杂度为线性,适用于大规模数据。注意处理遍历结束后的最后一次比较,确保结果的正确性。