每日一题:每天一个新挑战;
循序渐进:从易到难,扎实掌握;
系统分类:按数据结构分类,有助于构建知识框架;
丰富题量:100 道精选题,覆盖简单/中等/困难难度。
给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r – 1], nums[r]] 就是连续递增子序列。
示例 1:
输入:nums = [1,3,5,4,7]
输出:3
解释:最长连续递增序列是 [1,3,5], 长度为 3。
尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。
示例 2:
输入:nums = [2,2,2,2,2]
输出:1
解释:最长连续递增序列是 [2], 长度为 1。
提示:
- 1 <= nums.length <= 10^4
- -10^9 <= nums[i] <= 10^9
代码卡片

题目解析
所谓“连续递增子序列”是指序列中的每个元素都比前一个元素大,并且这些元素在数组中是连续排列的。
方法一:一次遍历
我们可以通过一次遍历数组的方式来解决这个问题。定义一个变量 maxLength 来记录最长连续递增序列的长度,另一个变量 currentLength 来记录当前正在处理的连续递增序列的长度。我们从数组的第二个元素开始遍历,比较当前元素和前一个元素的大小:
- 如果当前元素大于前一个元素,说明是递增的,将 currentLength 加 1。
- 否则,说明递增中断,更新 maxLength,并将 currentLength 重置为 1。
最后,遍历结束后再比较一次 maxLength 和 currentLength,以防最长的连续递增序列在数组的末尾。
- 时间复杂度: O(n),其中 n 是数组的长度。我们只需要遍历数组一次。
- 空间复杂度: O(1),只使用了常数空间来存储变量。
var findLengthOfLCIS = function(nums) {
if (nums.length === 0) return 0;
let maxLength = 1;
let currentLength = 1;
for (let i = 1; i < nums.length; i++) {
if (nums[i] > nums[i - 1]) {
currentLength++;
} else {
maxLength = Math.max(maxLength, currentLength);
currentLength = 1;
}
}
// 确保计算最后一段连续递增序列的长度
return Math.max(maxLength, currentLength);
};
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/288986
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!