Algorithm topic

一维动态规划:模式识别与解题模板

本专题包含 5 道题。先辨认输入结构和目标,再选择能够持续保持关键不变量的算法,而不是只记住某一道题的代码。

高频模式

动态规划5 道题

观察题目是否反复出现“动态规划”对应的数据访问、状态压缩或边界推进特征。

数组4 道题

观察题目是否反复出现“数组”对应的数据访问、状态压缩或边界推进特征。

记忆化2 道题

观察题目是否反复出现“记忆化”对应的数据访问、状态压缩或边界推进特征。

数学1 道题

观察题目是否反复出现“数学”对应的数据访问、状态压缩或边界推进特征。

字典树1 道题

观察题目是否反复出现“字典树”对应的数据访问、状态压缩或边界推进特征。

哈希表1 道题

观察题目是否反复出现“哈希表”对应的数据访问、状态压缩或边界推进特征。

核心模板

  1. 先写清输入规模、目标值和允许修改的数据。
  2. 定义每一步开始和结束时必须成立的不变量。
  3. 把循环、递归、队列或状态转移拆成可验证事件。
  4. 用最小输入、重复值和退化结构验证边界。

常见错误

  • 只根据样例选择算法,没有核对复杂度上限。
  • 更新多个指针或状态时破坏旧值依赖。
  • 忽略空输入、重复值、断开结构或极端顺序。
  • 代码结果正确,但解释没有说明为什么不会漏解或重复。

代表题

#70 · EASY

爬楼梯

每次爬 1 或 2 阶,计算到达第 n 阶的方法数。

记忆化数学动态规划
#198 · MEDIUM

打家劫舍

不能偷相邻房屋,求最高金额。

数组动态规划
#139 · MEDIUM

单词拆分

判断字符串能否由词典单词拼接而成。

字典树记忆化数组哈希表字符串动态规划
#322 · MEDIUM

零钱兑换

用最少硬币凑出 amount,无法凑出返回 -1。

广度优先搜索数组动态规划
#300 · MEDIUM

最长递增子序列

返回最长严格递增子序列长度。

数组二分查找动态规划
查看本分类全部 5 道题