JavaScript算法每日一题最长连续递增序列

每日一题:每天一个新挑战;
循序渐进:从易到难,扎实掌握;
系统分类:按数据结构分类,有助于构建知识框架;
丰富题量:100 道精选题,覆盖简单/中等/困难难度。

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 lr(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

代码卡片

JavaScript算法每日一题最长连续递增序列

题目解析

所谓“连续递增子序列”是指序列中的每个元素都比前一个元素大,并且这些元素在数组中是连续排列的。

方法一:一次遍历

我们可以通过一次遍历数组的方式来解决这个问题。定义一个变量 maxLength 来记录最长连续递增序列的长度,另一个变量 currentLength 来记录当前正在处理的连续递增序列的长度。我们从数组的第二个元素开始遍历,比较当前元素和前一个元素的大小:

  • 如果当前元素大于前一个元素,说明是递增的,将 currentLength 加 1。
  • 否则,说明递增中断,更新 maxLength,并将 currentLength 重置为 1。

最后,遍历结束后再比较一次 maxLengthcurrentLength,以防最长的连续递增序列在数组的末尾。

  • 时间复杂度: 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
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 4小时前
下一篇 4小时前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注