当前位置: 首页 > news >正文

每日一题 == 674. 最长连续递增序列

目录

题目描述

解题思路

代码实现

测试用例与结果

复杂度分析

总结


题目描述

给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回其长度。连续递增子序列的定义是:子序列中的元素严格递增且在原数组中连续。

示例 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]


解题思路

要找到最长的连续递增子序列,可以通过遍历数组并比较相邻元素的值来实现。具体步骤如下:

  1. 初始化变量:维护两个变量 max(记录最长长度)和 count(记录当前递增序列的长度)。初始时,count 设为 1(单个元素视为长度为 1 的序列)。

  2. 遍历数组:从第一个元素开始,依次比较当前元素与下一个元素:

    • 若当前元素小于下一个元素,说明递增,count 加 1。

    • 否则,说明递增中断,更新 max 为当前最大值,并重置 count 为 1。

  3. 处理边界:遍历结束时,可能未处理最后一个递增序列,因此在循环结束后需再次更新 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),仅使用常数级别的额外空间。


总结

通过遍历数组并动态维护当前递增序列的长度,能够高效地找到最长连续递增子序列的长度。该方法简洁且时间复杂度为线性,适用于大规模数据。注意处理遍历结束后的最后一次比较,确保结果的正确性。

http://www.dtcms.com/a/98221.html

相关文章:

  • 26_ajax
  • qgis点从面图层上拾取属性
  • NLP高频面试题(二十四)——RAG相关内容简介
  • 【Java】public class Person{}和public Person{} 和 public Person person究竟都有哪些区别呢。
  • Java---类与对象
  • NLP高频面试题(二十三)对抗训练的发展脉络,原理,演化路径
  • 关于跨域与.NET的处理方案
  • 软考-高级-系统架构设计师【考试备考资料下载】
  • 自学-408-《计算机网络》(总结速览)
  • 区块链在教育领域的创新应用:改变传统教育的未来
  • 黑盒测试的等价类划分法(输入数据划分为有效的等价类和无效的等价类)
  • 综合实验
  • qt之使用redis与其他程序(python)交互同通信
  • 基于SpringBoot实现的高校实验室管理平台功能四
  • 多线程 -- Thread类
  • vue学习
  • Linux内核同步机制:解锁并发编程的奥秘
  • 软件的常用设计模式。可参考一个一个学习
  • 用Nginx实现负载均衡与高可用架构(整合Keepalived)
  • [Linux]在vim中批量注释与批量取消注释
  • 进程Kill杀死后GPU显存没有释放仍然被占用,怎么杀死僵尸进程
  • 跟着StatQuest学知识08-RNN与LSTM
  • Claude 在 SVG 绘图创作中的潜力与技巧
  • 【软考-架构】10.1、软件工程概述-CMM-软件过程模型-逆向工程
  • Pycharm (十)字符串扩展:统计小串在大串中出现的次数
  • C++23:现代C++的模块化革命与零成本抽象新高度
  • 笔记:遇见未来——6G协同创新技术研讨会
  • FPGA调试笔记
  • 从代码学习深度学习 - 含并行连结的网络(GoogLeNet)PyTorch版
  • 淘宝双十一大促监控系统开发:实时追踪爆品数据与流量波动