算法笔记 · 从一道题到一类问题¶
题解的价值不仅在于答案,更在于可以迁移的思路。这里按照解题模式整理笔记,阅读时建议关注:状态表示、循环不变量、边界条件与复杂度。
按问题特征寻找工具¶
| 如果问题涉及…… | 可以先考虑 | 代表笔记 |
|---|---|---|
| 快速查找、计数、去重 | 哈希表 | 两数之和、字母异位词分组 |
| 有序数组或原地整理 | 双指针 | 移动零、三数之和 |
| 连续区间与固定长度 | 滑动窗口 | 定长子串中元音的最大数目 |
| 节点连接与访问顺序 | 链表 | 反转链表、环形链表 |
| 有序性或单调判定 | 二分查找 | 二分查找导读 |
| 层次结构与递归子问题 | 二叉树 | 二叉树导读 |
| 嵌套、回退、最近未匹配元素 | 栈 | 有效的括号、最小栈 |
| 动态地取出最小/最大元素 | 堆与优先队列 | 二叉堆、优先队列 |
| 动态前缀和、区间查询 | 树状数组与线段树 | 树状数组、线段树 |
这张表用于产生候选思路,不代表题目一定适合某种方法。输入范围、是否允许修改原数组,以及操作频率都会影响选择。
一道题的阅读顺序¶
- 明确输入、输出和约束,写出最直接的解法。
- 找到重复工作:重复搜索、重复求和,还是重复遍历?
- 说明改进方法保存了哪些信息。
- 用小案例走一遍,再检查空输入、重复值和极端边界。
- 比较时间复杂度、空间复杂度与代码维护成本。
独立复现比直接复制更有效
读懂题解后关闭页面,重新写一遍。若卡住,记录具体缺失的推理,再回到对应段落。
进阶补充¶
还不确定阅读顺序?查看算法学习路线。