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

动态规划题解——最长递增子序列【LeetCode】记忆化搜索方法

300. 最长递增子序列


一、算法逻辑(逐步思路)

❓ 问题描述:

给定一个整数数组 nums,找出其中最长严格递增子序列的长度。


✅ 解题思路(DFS + 记忆化)

1. 定义递归函数:
dfs(i) 表示:以 nums[i] 为结尾的最长递增子序列的长度
2. 转移逻辑:
  • 对于位置 i,你要去找 0~i-1 所有小于 nums[i] 的前缀 j
  • 对每个满足 nums[j] < nums[i] 的位置 j
    • 当前以 nums[i] 为结尾的序列长度可以是:dfs(j) + 1
    • 所以取其中的最大值。
3. 递归基:
  • dfs(i) 至少为 1,因为每个元素自身就是一个长度为 1 的递增子序列。
4. 最终答案:
  • 所有 dfs(i) 中的最大值,即 max(dfs(i) for i in range(n))
5. 使用 @cache 做记忆化,避免重复递归计算。

二、算法核心点

✅ 核心思想:“以 i 结尾”模型 + 记忆化 DFS

  • 每一个位置都试图作为“递增序列的终点”,寻找它前面的合法子结构;
  • 这是 LIS 问题的经典思维方式(不同于“以 i 开头”的方式);
  • 记忆化可以有效避免指数级递归爆炸。
class Solution:def lengthOfLIS(self, nums: List[int]) -> int:@cachedef dfs(i:int)-> int:res = 0for j in range(i):if nums[j] < nums[i]:res = max(res, dfs(j))return res+1return max(dfs(i) for i in range(len(nums)))

三、复杂度分析

  • 时间复杂度:O(n²)
    • 一共 n 个位置;
    • 每个 dfs(i) 至多遍历前 i 个位置(最多 n 次);
    • 加上缓存,每个状态只算一次。
  • 空间复杂度:O(n)
    • 缓存表大小为 n
    • 递归栈最大深度为 n

总结表:

维度

内容

✅ 思路逻辑

每个位置向前查找比它小的数,递归求以该位置为结尾的 LIS 长度

✅ 核心技巧

转化为“以 i 结尾”的子问题;记忆化避免重复递归

✅ 时间复杂度

O(n²),两层循环(递归 + 遍历前缀)

✅ 空间复杂度

O(n),记忆表和递归栈大小


💡 拓展建议

  • 如果你想进一步优化时间到 O(n log n),可以使用贪心 + 二分法的经典 LIS 做法(如使用 bisect 插入维护当前最小末尾值序列);
  • DFS 写法适合初步掌握问题结构,DP/贪心更适合大数据场景。
http://www.dtcms.com/a/279849.html

相关文章:

  • 【每日刷题】杨辉三角
  • Git根据标签Tag强制回滚版本
  • 面试常问:如何在一个长度为n的无序数据快速获取前k个数值
  • 网络传输过程
  • GaussDB between的用法
  • 光伏板如何最大化铺设?
  • 【PostgreSQL异常解决】`PostgreSQL`异常之类型转换错误
  • 记录自己在将python文件变成可访问库文件是碰到的问题
  • vert.x 官网docs, vert.x中文文档地址 vertx文档
  • 文心4.5开源之路:引领技术开放新时代!
  • 【前端:Typst】--let关键字的用法
  • 高德开放平台携手阿里云,面向开发者推出地图服务产品MCP Server
  • 外部协作不力影响项目进度,如何加强外部沟通
  • 项目进度压缩影响质量,如何平衡进度与质量
  • LeetCode|Day11|557. 反转字符串中的单词 III|Python刷题笔记
  • 稀土化合物:助力高效种植与健康养殖
  • vue笔记3 VueRouter VueX详细讲解
  • 对象的使用
  • CAN终端电阻为什么是60R+60R,而不直接用120R?
  • 前端vue对接海康摄像头流程
  • Flink窗口处理函数
  • C++-linux 5.gdb调试工具
  • 【从语言幻觉看趋势】从语言幻觉到多智能体协作:GPT多角色系统的技术演进与实践路径
  • 判断端口处于监听状态的方法
  • 腾讯云WAF域名分级防护实战笔记
  • EPLAN 电气制图(八):宏应用与变频器控制回路绘制全攻略
  • ssm学习笔记day07mybatis
  • 如何在 Shopify 中创建退货标签
  • 【C语言】浮点数在内存中的存储:从科学计数法到内存存储
  • 从输入URL到页面呈现都发生了什么?