01 - 如何真正掌握算法¶
目标:从"看过算法"到"能手写算法"
时间:持续学习
核心原则:理解思想 + 手写实现 + 反复练习
🎯 为什么你"看过"但不会写?¶
常见情况¶
Text Only
看过快速排序的视频 → "哦,原来是这样" → 面试让手写 → 写不出来
看过动态规划的题解 → "看懂了" → 遇到新题 → 不会做
背过算法代码 → 默写出来 → 换个问法 → 不会变通
问题根源¶
| 错误方式 | 结果 |
|---|---|
| 只看不动手 | 眼高手低 |
| 死记硬背 | 不会变通 |
| 追求数量 | 质量不高 |
| 不复习 | 学完就忘 |
✅ 正确的学习方法¶
三遍学习法¶
Text Only
第一遍:理解概念
↓ 看视频/文章,理解算法思想
↓ 看懂示例代码
第二遍:手写实现
↓ 关掉资料,自己在纸上/编辑器写
↓ 写不出来再看一眼,然后继续写
↓ 直到能完整写出来
第三遍:优化应用
↓ 思考:时间复杂度能优化吗?
↓ 思考:空间复杂度能优化吗?
↓ 做3-5道变式题目
刻意练习¶
Text Only
不要:一天看10个算法,每个都似懂非懂
要:一天彻底掌握1个算法,能手写、能讲清楚
不要:只做简单题
要:循序渐进,简单→中等→困难
不要:做完就忘
要:定期复习(1天后、1周后、1月后)
📝 具体执行计划¶
阶段1:基础算法(2-3周)¶
目标:能手写基础算法
| 主题 | 算法 | 时间 |
|---|---|---|
| 排序 | 冒泡、选择、插入、快排、归并 | 3天 |
| 搜索 | 二分搜索、BFS、DFS | 3天 |
| 数组 | 双指针、滑动窗口、前缀和 | 3天 |
| 链表 | 反转、合并、检测环 | 3天 |
| 栈和队列 | 单调栈、单调队列 | 3天 |
阶段2:进阶算法(4-6周)¶
目标:掌握核心算法思想
| 主题 | 内容 | 时间 |
|---|---|---|
| 递归 | 递归思想、尾递归 | 1周 |
| 动态规划 | 背包、股票、子序列 | 2周 |
| 树 | 遍历、递归、LCA | 1周 |
| 图 | 最短路径、拓扑排序 | 1周 |
| 贪心 | 区间问题、哈夫曼 | 1周 |
阶段3:高级算法(持续)¶
- 字符串算法(KMP、Trie)
- 高级数据结构(并查集、线段树)
- 数学算法
💡 学习技巧¶
1. 画图理解¶
2. 用自己的话解释¶
Text Only
快速排序:
"快速排序的核心是分治法。先选一个基准值(pivot),
把数组分成两部分:小于pivot的在左边,大于pivot的在右边。
然后对左右两部分递归排序。"
如果能这样讲清楚,说明真的理解了。
3. 建立模板¶
Python
# 二分搜索模板
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = left + (right - left) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
# 记住模板,遇到变式时修改关键部分
4. 记录错误¶
Markdown
## 错误记录
### 2026-01-29
**算法**:二分搜索
**错误**:mid = (left + right) // 2 导致整数溢出
**正确**:mid = left + (right - left) // 2
**原因**:left + right可能超过整数最大值
🎓 练习平台推荐¶
| 平台 | 特点 | 适合阶段 |
|---|---|---|
| LeetCode | 题量大,分类清晰 | 全阶段 |
| 牛客网 | 中文,有面经 | 面试准备 |
| 代码随想录 | 系统讲解 | 初学者 |
| VisuAlgo | 算法可视化 | 理解概念 |
📚 与现有资料结合¶
你已经有的资料: - 算法/ - 完整的算法教程 - Python开发/ - Python基础
使用建议: 1. 先看 算法/LEARNING_GUIDE.md 2. 按本计划的时间表学习 3. 用手写练习检验掌握程度
✅ 检查标准¶
掌握一个算法的标准:¶
- 能用自己的话解释算法思想
- 能不查资料手写代码
- 能分析时间复杂度和空间复杂度
- 能做3道相关的变式题
- 能向别人讲解这个算法
记住:算法不是背出来的,是练出来的。坚持3个月,你会看到质的飞跃! 💪