用费曼学习法,30天从0掌握算法
完整教程 + 120+配套资源 + 完整代码实现
⭐ 如果对你有帮助,请给个 Star!
❌ 看到算法题就头疼,完全不知道从何下手
❌ 面试被算法卡住,明明会写业务代码却过不了面试
❌ 买了一堆书,看了忘、忘了看,始终无法系统掌握
❌ LeetCode 刷了100道题,遇到新题还是不会
❌ 知道要学算法,但不知道学什么、怎么学
如果有以上任何一条,这个项目就是为你准备的!
🎯 已完成内容:
- ✅ 30天完整教程(约10万字)
- ✅ 120+配套资源(练习题、答案、思维导图、检查清单)
- ✅ 所有算法的JavaScript实现
- ✅ 费曼学习法 + 游戏化学习
- ✅ 从0到LeetCode实战
"如果你不能简单地解释它,你就没有真正理解它。" — 费曼
每章都有"费曼输出"环节,逼着你真正理解,而不是死记硬背。
第1周:基础数据结构(数组、链表、栈、队列)
第2周:高级数据结构(树、堆、哈希表、图)
第3周:排序算法(6种经典排序)
第4周:高级算法(二分查找、贪心、动态规划)
循序渐进,从易到难。
每天包含4种资源:
- ✅ 学习检查清单 - 明确学习目标
- ✅ 练习题 - 巩固知识
- ✅ 答案详解 - 详细解析
- ✅ 思维导图 - 知识框架
总计 120+ 配套资源,约 40,000+ 行内容!
- ✅ 所有算法都有 JavaScript 实现
- ✅ 代码注释详细,小白也能看懂
- ✅ 包含测试用例,可以直接运行
- ✅ 性能对比,理解优化技巧
- ✅ 勾选任务清单,完成有成就感
- ✅ 打分评级系统,知道自己水平
- ✅ 成就系统,激励持续学习
| Day | 主题 | 难度 | 预计时间 |
|---|---|---|---|
| Day 1 | 为什么要学算法? | ⭐ | 1.5h |
| Day 2 | 数组基础 | ⭐ | 2h |
| Day 3 | 链表详解 | ⭐⭐ | 2h |
| Day 4 | 栈详解 | ⭐⭐ | 2h |
| Day 5 | 队列详解 | ⭐⭐ | 2h |
| Day 6 | 递归详解 | ⭐⭐⭐ | 2.5h |
| Day 7 | 第一周复习与实战 | ⭐⭐ | 2h |
| Day | 主题 | 难度 | 预计时间 |
|---|---|---|---|
| Day 8 | 树结构基础 | ⭐⭐ | 2h |
| Day 9 | 二叉搜索树 | ⭐⭐⭐ | 2.5h |
| Day 10 | 堆和优先队列 | ⭐⭐⭐ | 2.5h |
| Day 11 | 哈希表详解 | ⭐⭐⭐ | 2.5h |
| Day 12 | 图结构基础 | ⭐⭐⭐ | 2.5h |
| Day 13 | 图的遍历详解 | ⭐⭐⭐ | 2.5h |
| Day 14 | 最短路径 + 复习 | ⭐⭐⭐⭐ | 3h |
| Day | 主题 | 难度 | 预计时间 |
|---|---|---|---|
| Day 15 | 冒泡排序 | ⭐⭐ | 2h |
| Day 16 | 选择排序 | ⭐⭐ | 2h |
| Day 17 | 插入排序 | ⭐⭐ | 2h |
| Day 18 | 归并排序 | ⭐⭐⭐ | 2.5h |
| Day 19 | 快速排序 | ⭐⭐⭐ | 2.5h |
| Day 20 | 堆排序 | ⭐⭐⭐ | 2.5h |
| Day 21 | 排序总结与对比 | ⭐⭐ | 2h |
| Day | 主题 | 难度 | 预计时间 |
|---|---|---|---|
| Day 22 | 二分查找 | ⭐⭐ | 2h |
| Day 23 | 贪心算法 | ⭐⭐⭐ | 2.5h |
| Day 24 | 动态规划入门 | ⭐⭐⭐⭐ | 3h |
| Day 25 | 动态规划进阶 | ⭐⭐⭐⭐ | 3h |
| Day 26 | 动态规划高级 | ⭐⭐⭐⭐⭐ | 3.5h |
| Day 27 | LeetCode 实战 1 | ⭐⭐⭐⭐ | 3h |
| Day 28 | LeetCode 实战 2 | ⭐⭐⭐⭐ | 3h |
| Day 29 | LeetCode 实战 3 | ⭐⭐⭐⭐ | 3h |
| Day 30 | 总复习与毕业致辞 | ⭐⭐ | 2h |
每个主题都包含4种配套资源,位于 配套资源/ 目录:
配套资源/
├── Day01-学习检查清单.md
├── Day01-练习题.md
├── Day01-答案详解.md
├── Day01-思维导图.md
├── Day02-学习检查清单.md
├── Day02-练习题.md
├── Day02-答案详解.md
├── Day02-思维导图.md
...
└── Day30-思维导图.md
总计:120+ 文件
学习检查清单:
- ✅ 明确学习目标
- ✅ 知识点自查
- ✅ 自我测试题
- ✅ 实践能力检查
- ✅ 费曼输出任务
练习题:
- ✅ 基础概念题
- ✅ 代码实践题
- ✅ 理解应用题
- ✅ 费曼输出练习
- ✅ 评分标准
答案详解:
- ✅ 标准答案
- ✅ 详细解析
- ✅ 执行过程演示
- ✅ 错误分析
- ✅ 改进建议
思维导图:
- ✅ 知识框架
- ✅ 核心要点
- ✅ 学习建议
- ✅ 常见误区
直接在 GitHub 上浏览教程:
- 点击上方的课程大纲
- 按顺序阅读
- 完成配套资源
我在掘金发布了系列深度解析文章,每篇1000+行:
- 🔥 A*算法:游戏AI寻路的"上帝视角" - 启发式搜索详解
- 🔥 Trie树:搜索引擎自动补全的秘密 - 前缀匹配艺术
- 🔥 线段树:区间查询的终极武器 - O(log n)高效统计
- 🔥 并查集:连通性问题的终极方案 - 接近O(1)的神奇结构
- 🔥 红黑树:从入门到精通 - 面试杀手征服指南
- 🔥 WebAssembly+算法实战 - 前端性能提升10倍
💡 提示:将
xxx替换为你实际的掘金文章ID,或者先发布文章后再更新链接
# 克隆仓库
git clone https://github.com/Lee985-cmd/algorithm-30days
# 进入目录
cd algorithm-30days
# 用你喜欢的编辑器打开
code . # VS Code所有代码都可以在 code/ 目录找到。
/**
* 快速排序 - 原地排序版
*/
function quickSort(arr) {
function partition(low, high) {
const pivot = arr[high];
let i = low;
for (let j = low; j < high; j++) {
if (arr[j] < pivot) {
[arr[i], arr[j]] = [arr[j], arr[i]];
i++;
}
}
[arr[i], arr[high]] = [arr[high], arr[i]];
return i;
}
function sort(low, high) {
if (low < high) {
const pivotIndex = partition(low, high);
sort(low, pivotIndex - 1);
sort(pivotIndex + 1, high);
}
}
sort(0, arr.length - 1);
return arr;
}
// 测试
console.log(quickSort([3, 6, 8, 10, 1, 2, 1]));
// 输出:[1, 1, 2, 3, 6, 8, 10]运行测试:
node code/quickSort.js更多代码示例请查看 code/ 目录。
| 维度 | 传统学习 | 本教程 |
|---|---|---|
| 学习时间 | 3-6个月 | 30天 |
| 掌握程度 | 30-50% | 80-90% |
| 面试通过率 | 低 | 高 |
| 学习方式 | 零散 | 系统化 |
| 实践机会 | 少 | 多(120+练习) |
| 趣味性 | 枯燥 | 游戏化 |
- 编程初学者,想打好基础
- 准备面试的求职者
- 想转行做开发的非科班同学
- 工作1-3年,想提升算法能力的开发者
- 喜欢系统化学习的人
- 已经是算法高手(可以看后面的高级部分)
- 只想速成,不愿意花30天时间
- 不喜欢动手写代码
每天 1-2 小时:
-
阅读主教程(30-40分钟)
- 理解概念
- 看代码示例
- 做笔记
-
完成配套资源(30-40分钟)
- 学习检查清单
- 练习题
- 查看答案详解
- 看思维导图
-
费曼输出(10-20分钟)
- 用自己的话解释
- 录视频或写文章
- 讲给别人听
-
打卡记录(5分钟)
- 勾选完成的任务
- 记录学习心得
- 明天计划
✅ 一定要做的:
- 按顺序学习,不要跳着学
- 每天都要动手写代码
- 完成费曼输出
- 做练习题
- 坚持30天
❌ 不要做的:
- 只看不动手
- 跳过练习题
- 三天打鱼两天晒网
- 急于求成
"跟着这个教程学了2周,面试终于过了算法关!"
— 小明,前端开发 ⭐⭐⭐⭐⭐
"费曼学习法真的有用,以前看不懂的现在都能讲给别人听了!"
— 小红,应届生 ⭐⭐⭐⭐⭐
"配套的练习题很有用,不是那种看完就忘的教程。"
— 小李,后端开发 ⭐⭐⭐⭐⭐
欢迎贡献!你可以:
-
修正错误
- 发现错别字或代码错误
- 提 Issue 或 PR
-
改进内容
- 补充更清晰的解释
- 添加更多示例
- 优化代码
-
翻译
- 翻译成其他语言
-
分享经验
- 分享你的学习心得
- 提供改进建议
# 1. Fork 本仓库
# 2. 创建分支
git checkout -b feature/your-feature
# 3. 提交修改
git commit -m "Add: 你的修改说明"
# 4. 推送到分支
git push origin feature/your-feature
# 5. 提交 Pull Request本项目采用 MIT License - 详见 LICENSE 文件
你可以:
- ✅ 免费使用
- ✅ 修改
- ✅ 分发
- ✅ 商用
你需要:
- 保留版权声明
感谢以下资源和灵感来源:
- GitHub: @Lee985-cmd
- 邮箱: 376384019@qq.com
- 公众号: Lee 的成长日记(扫码关注,获取更多算法干货与学习心得)
准备好了吗?从 Day 1 开始吧!
如果觉得这个项目有用,请:
- ⭐ Star 本仓库
- 🔄 Fork 并分享给朋友
- 💬 提 Issue 或 Discussion
- 📢 在社交媒体推广
你的支持是我持续更新的动力! 💪
最后记住:
"算法学习是一场马拉松,不是短跑。重要的不是你跑得有多快,而是你能坚持多久。"
30天后,遇见更好的自己! 🎉
- 本项目中的所有算法实现和教程内容均为原创,仅供学习参考
- 提到的 LeetCode 题目仅作为练习参考,题目版权归 LeetCode 所有
- 推荐书籍(如《算法导论》)的版权归原出版社所有
- 如有任何版权问题,请联系我删除相关内容
- 使用本教程学习产生的任何后果,作者不承担责任
