news 2026/6/16 16:31:56

贪心算法-递增的三页子序列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
贪心算法-递增的三页子序列

题目链接

一、问题描述

给定一个整数数组nums,判断是否存在长度为3的递增子序列,即是否存在下标i < j < k,使得nums[i] < nums[j] < nums[k]

  • 存在则返回true,否则返回false

二、核心解法

解法1:动态规划(DP)
  • 思路:计算数组的**最长递增子序列(LIS)**的长度,若长度 ≥ 3,则说明存在符合要求的子序列。
  • 实现逻辑
    1. 定义dp[i]表示以nums[i]结尾的最长递增子序列的长度。
    2. 对每个i,遍历所有j < i,若nums[j] < nums[i],则dp[i] = max(dp[i], dp[j] + 1)
    3. 遍历dp数组,若存在值 ≥ 3,直接返回true
  • 复杂度:时间复杂度O(n²),空间复杂度O(n)(需存储dp数组)。
解法2:贪心算法
  • 思路:用两个变量ab分别记录长度为1长度为2的递增子序列的最小末尾值,遍历数组时更新这两个变量,一旦找到比b大的元素,说明存在长度为3的递增子序列。
  • 实现逻辑(以示例[2,1,5,0,4,6]为例):
    1. 初始化a = ∞b = ∞
    2. 遍历每个元素x
      • x ≤ a→ 更新a = x(保持长度1的子序列末尾最小);
      • a < x ≤ b→ 更新b = x(保持长度2的子序列末尾最小);
      • x > b→ 说明存在a < b < x,即长度为3的递增子序列,直接返回true
    3. 遍历结束未找到则返回false
  • 复杂度:时间复杂度O(n)(仅需一次遍历),空间复杂度O(1)(仅用两个变量),是更优的解法。

三、知识点总结

  1. 问题本质:该问题是「最长递增子序列(LIS)」的特例,只需判断 LIS 长度是否 ≥ 3。
  2. 算法对比
    • 动态规划适用于需要完整计算 LIS 长度的场景,但时间复杂度较高;
    • 贪心解法针对「判断是否存在长度为3的递增子序列」做了优化,时间、空间效率更优。
  3. 贪心策略的核心:维护最小的可能末尾值,让后续更容易找到更长的递增子序列,从而提升效率。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 16:25:35

机器学习入门(二十)支持向量机SVM

支持向量机全称是Supported Vector Machine&#xff08;支持向量机&#xff09;即寻找到一个超平面使样本分成两类&#xff0c;并且间隔最大。• 是一种监督学习算法&#xff0c;主要用于分类&#xff0c;也可用于回归• 与逻辑回归和决策树等其他分类器相比&#xff0c;SVM 提…

作者头像 李华
网站建设 2026/6/15 13:56:40

语音转写还能识情绪?SenseVoiceSmall让你大开眼界

语音转写还能识情绪&#xff1f;SenseVoiceSmall让你大开眼界 你有没有遇到过这样的场景&#xff1a;会议录音转成文字后&#xff0c;发现“这个方案很好”和“这个方案很好&#xff01;”——表面一样&#xff0c;语气却天差地别&#xff1b;又或者客服录音里突然响起一阵掌声…

作者头像 李华
网站建设 2026/5/28 23:31:18

2026年1月份国内3D打印行业11起融资,最高超亿元

3D打印技术参考统计发现&#xff0c;2026年1月国内3D打印行业共完成11起融资&#xff0c;覆盖消费级3D打印材料、设备&#xff0c;工业级3D打印设备、材料、制造服务&#xff0c;最高融资金额过亿。1. 中科煜宸完成C轮融资1月28日&#xff0c;南京中科煜宸激光技术有限公司完成…

作者头像 李华
网站建设 2026/6/13 8:29:30

Spring httpMessageConverter(四)

前端向后端传递参数的形式前端向后端传递参数的所有常见形式&#xff0c;以及这些形式在 Spring Boot 中对应的接收方式&#xff0c;这是实际开发中对接前后端的核心知识点。接下来我会按「参数传递位置」分类&#xff0c;详细讲解每种形式的特点、示例和后端接收方式&#xff…

作者头像 李华
网站建设 2026/6/12 13:54:45

测试用例--等价类划分、边界值法

一、测试用例/案例&#xff08;test case/test instance&#xff09; 1、定义&#xff1a;是在测试执行之前&#xff0c;由测试人员编写的指导测试过程的重要文档&#xff0c;主要包括&#xff1a;用例编号、测试目的、测试步骤&#xff08;用例描述&#xff09;&#xff0c;预…

作者头像 李华
网站建设 2026/5/28 22:15:10

Python:代码对象

在 Python 的执行模型中&#xff0c;可执行代码并不是以字符串或抽象语法树的形式直接运行。源码在执行之前&#xff0c;会被编译为一种中间表示——代码对象&#xff08;code object&#xff09;。代码对象是 Python 对“可执行逻辑结构”的静态描述&#xff0c;是连接源码与运…

作者头像 李华