算法基础
先学什么
这一层不负责记住某一道题,而是建立分析算法、控制边界和识别题型的共同语言。建议按下面顺序学习。
flowchart LR A[复杂度分析] --> B[递归与迭代] B --> C[双指针] C --> D[前缀和与差分] D --> E[单调栈与单调队列] E --> F["排序 / 搜索 / DP / 图论"]
核心笔记
- 复杂度分析:判断算法能否在数据规模内运行,并理解均摊复杂度。
- 递归与迭代:看懂调用栈、递归边界和递归树。
- 双指针:用两个位置变量压缩嵌套枚举。
- 前缀和与差分:处理静态区间查询与批量区间修改。
- 单调栈与单调队列:维护“仍可能成为答案”的候选元素。
题型识别
| 题目特征 | 优先想到 | 关键条件 |
|---|---|---|
| 有序数组、两端选择 | 双指针 | 移动一端后能排除一批答案 |
| 多次查询区间和 | 前缀和 | 数组基本不修改 |
| 多次给区间整体加值 | 差分 | 最后统一还原结果 |
| 下一个更大/更小元素 | 单调栈 | 每个元素只需被压栈、弹栈一次 |
| 固定窗口最大/最小值 | 单调队列 | 队头始终是当前窗口最优候选 |
| 问“能不能跑完” | 复杂度分析 | 先看数据规模,再选算法 |
学习检查
- 能从循环结构估算时间复杂度。
- 能画出一次递归的调用树和终止条件。
- 能说明双指针每次移动排除了哪些情况。
- 能写出带前导
0的前缀和模板。 - 能解释单调栈中元素为什么只会被弹出一次。
返回:算法学习导航