跳转至

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. 画图理解

Text Only
快速排序的分区过程:

[3, 6, 8, 10, 1, 2, 1]
 ↑              ↑
 i              j

pivot = 1

分区后:[1] | 1 | [6, 8, 10, 3, 2]

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个月,你会看到质的飞跃! 💪