[LeetCode post](https://leetcode.cn/discuss/post/3851162/ru-he-ke-xue-de-8ge-yue-xie-2000ti-x-plo-zvsq/)

[xhs(](http://xhslink.com/o/9IVHU999iO0)

![algo](./png/Re_Algo.png)

# 从零开始的算法学习之路
**Re:Algo - Starting Algorithms from Zero**

### 前言

大学幸运的发现了编程很有趣，开始了学习

下面是结合自身学习思路的一些整理和分享，亲测0基础只要科学计划完全可以入门

## Algo-Atlas

**主要分为三个部分**

### 1. 系统搭框架

将网上丰富的学习资源 (网课+博客+资料..) 系统整理一份笔记

有了自己的框架之后刷题大脑可以自动归档，可以参考下面分类来搭建自己的框架

 - [100道典型例题](#100道典型例题)
 - [递归，搜索与回溯](#递归搜索与回溯)
 - [动态规划](#动态规划)
 - [贪心算法](#贪心算法)

下面是概览的标题，点击可以跳转到我整理的题解

#### 100道典型例题

1. [\[Lc\(1\)双指针_1\] 移动零 | 复写零 | 快乐数](https://lvynote.blog.csdn.net/article/details/145915942)
2. [\[Lc\(1\)双指针_3\] 双指针 | 三数 | 四数之和](https://lvynote.blog.csdn.net/article/details/145950432)
3. [\[Lc\(1\)双指针_2\] 盛水最多的容器 | 有效三角形的个数 | 和为S的两个数字](https://lvynote.blog.csdn.net/article/details/145951495)
4. [\[Lc\(2\)滑动窗口_1\] 长度最小的数组 | 无重复字符的最长子串 | 最大连续1的个数 III | 将 x 减到 0 的最小操作数](https://lvynote.blog.csdn.net/article/details/145970938)
5. [\[Lc\(2\)滑动窗口_2\] 水果成篮 | 字符串中所有字母异位词 | 串联所有单词的子串](https://lvynote.blog.csdn.net/article/details/146012994)
6. [\[Lc\(4\)前缀和_1\] 一维/二维模板 | 寻找数组的中心下标 | 除自身以外数组的乘积](https://lvynote.blog.csdn.net/article/details/146050787)
7. [\[Lc5 位运算_1\] 常见用法 | 判定字符是否唯一 | 丢失的数字 | 两整数之和 | 只出现一次的数字 II](https://lvynote.blog.csdn.net/article/details/146076791)
8. [\[Lc6_模拟\] 替换所有的问号 | 提莫攻击 | Z 字形变换 | 外观数列](https://lvynote.blog.csdn.net/article/details/146102647)
9. [\[Lc7_分治-快排\] 分治 | 颜色分类 | 快速排序](https://lvynote.blog.csdn.net/article/details/146120346)
10. [\[Lc7_分治-快排\] 快速选择排序 | 数组中的第K个最大元素 | 库存管理 III](https://lvynote.blog.csdn.net/article/details/146123800)
11. [\[Lc10_hash\] 总结 | 两数之和 | 字符重排 | 存在重复元素 i ii | 字母异位词分组](https://lvynote.blog.csdn.net/article/details/146165252)
12. [\[Lc11_字符串\] 最长公共前缀 | 最长回文子串 | 二进制求和](https://lvynote.blog.csdn.net/article/details/146177257)
13. [\[Lc12_栈\] 删除相邻重复项 | 比较含退格的字符串 | 基本计算器 II](https://lvynote.blog.csdn.net/article/details/146190941)
14. [\[Lc13_queue+bfs\] N 叉树的层序遍历 | 锯齿形层序遍历 | 二叉树最大宽度 | 每个树行中找最大值](https://lvynote.blog.csdn.net/article/details/146281585)
15. [\[Lc14_priority_queue\] 最后一块石头重量 | 数据流中的第 K 大元素 | 前K个高频单词 | 数据流的中位数](https://lvynote.blog.csdn.net/article/details/146329248)
16. [\[Lc15_bfs+floodfill\] 图像渲染 | 岛屿数量 | 岛屿的最大面积 | 被围绕的区域](https://lvynote.blog.csdn.net/article/details/146347318)
17. [\[Lc16_bfs最短路\] 迷宫中离入口最近的出口 | 最小基因变化](https://lvynote.blog.csdn.net/article/details/146373986)
18. [\[Lc16_bfs最短路_2\] 单词接龙 | 为高尔夫比赛砍树](https://lvynote.blog.csdn.net/article/details/146402944)
19. [\[Lc17_多源 BFS_最短路\] 矩阵 | 飞地的数量 | 地图中的最高点 | 地图分析](https://lvynote.blog.csdn.net/article/details/146463490)
20. [\[Lc18_BFS拓扑排序\] 邻接表 | 课程表I II](https://lvynote.blog.csdn.net/article/details/146483372)
21. [\[Lc18_拓扑排序\] string+queue+map | 火星字典](https://lvynote.blog.csdn.net/article/details/146508282)

#### 递归，搜索与回溯

- 搜索是递归中的一个分支
- 回溯是搜索中的一个分支
- 因此我们学习顺序是递归、搜索、回溯。

总结详见：[\[Lc_1 递归\] 递归，搜索与回溯总结 | 详解汉诺塔问题](https://lvynote.blog.csdn.net/article/details/146394374)

[Lc递归，搜索与回溯]

1. [\[Lc_1 递归\] 递归，搜索与回溯总结 | 详解汉诺塔问题](https://lvynote.blog.csdn.net/article/details/146394374)
2. [\[Lc_1 递归_2\] 合并两个有序链表 | 反转链表 | 两两交换链表中的节点 | Pow\(x, n\)-快速幂](https://lvynote.blog.csdn.net/article/details/146417585)
3. [\[Lc_2 二叉树dfs\] 布尔二叉树的值 | 根节点到叶节点数字之和 | 二叉树剪枝](https://lvynote.blog.csdn.net/article/details/146447593)
4. [\[Graph\] 邻接矩阵 | 邻接表](https://lvynote.blog.csdn.net/article/details/146471098)
5. [\[Lc_2 二叉树dfs_2\] 验证二叉搜索树 | 第K小的元素 | 二叉树的所有路径](https://lvynote.blog.csdn.net/article/details/146482519)
6. [\[Lc_3 回溯\] 决策树 | 全排列 | 子集](https://lvynote.blog.csdn.net/article/details/146527379)
7. [\[Lc4_dfs\] 括号生成 | 组合 | 目标和](https://lvynote.blog.csdn.net/article/details/146541082)
8. [\[Lc4_dfs\] 找出所有子集的异或求和 | 全排列 II | 电话号码的字母组合](https://lvynote.blog.csdn.net/article/details/146534475)
9. [\[Lc4_dfs\] 组合总和 | 字母大小写全排列 | 优美的排列](https://lvynote.blog.csdn.net/article/details/146556074)
10. [\[Lc4_dfs\] N 皇后 | 有效的数独](https://lvynote.blog.csdn.net/article/details/146631296)
11. [\[Lc4_dfs\] 解数独 | 单词搜索](https://lvynote.blog.csdn.net/article/details/146703524)
12. [\[Lc4_dfs\] 黄金矿工 | 不同路径 III](https://lvynote.blog.csdn.net/article/details/146711533)
13. [\[Lc5_dfs+floodfill\] 简介 | 图像渲染 | 岛屿数量](https://lvynote.blog.csdn.net/article/details/146779689)
14. [\[Lc5_dfs+floodfill\] 岛屿的最大面积\(&传参\) | 被围绕的区域 | 太平洋大西洋水流问题（双标记位传参）](https://lvynote.blog.csdn.net/article/details/146877352)
15. [\[Lc6_记忆化搜索\] 扫雷游戏 | 理解 递归vs记忆化搜索vs dp](https://lvynote.blog.csdn.net/article/details/146925124)
16. [\[Lc6_记忆化搜索\] 不同路径 | 解决智力问题 | 有序三元组中的最大值](https://lvynote.blog.csdn.net/article/details/146953129)
17. [\[Lc6_记忆化搜索\] 最长递增子序列 | 矩阵中的最长递增路径](https://lvynote.blog.csdn.net/article/details/146965208)

#### 动态规划

动态规划最核心的思想，就在于 拆分子问题，记住过往，减少重复计算。

0基础可以先通过[\[dp_0\] 第 N 个泰波那契数 | 三步问题](https://lvynote.blog.csdn.net/article/details/146769412)建立直觉

[动态规划]

1. [\[dp_0\] 第 N 个泰波那契数 | 三步问题](https://lvynote.blog.csdn.net/article/details/146769412)
2. [\[dp_1\] 使用最小花费爬楼梯 | 解码方法 | 虚拟dp\[0\]=0](https://lvynote.blog.csdn.net/article/details/146959182)
3. [\[dp_3 路径问题\] 不同路径 | 障碍物 II | 珠宝的最高价值](https://lvynote.blog.csdn.net/article/details/146978842)
4. [\[dp4_路径问题\] 下降路径最小和 | 最小路径和 | 地下城游戏](https://lvynote.blog.csdn.net/article/details/146989648)
5. [\[dp5_多状态dp\] 按摩师 | 打家劫舍 II | 删除并获得点数 | 粉刷房子](https://lvynote.blog.csdn.net/article/details/146990449)
6. [\[dp_6\] 多状态 | 买卖股票的最佳时机 I II III IV | 含冷冻期 | 手续费 | 交易次数](https://lvynote.blog.csdn.net/article/details/147001829)
7. [\[dp7_子数组\] 最大子数组和 | 环形 | 最大子数组乘积](https://lvynote.blog.csdn.net/article/details/147191370)
8. [\[dp8_子数组\] 乘积为正数的最长子数组长度 | 等差数列划分 | 最长湍流子数组](https://lvynote.blog.csdn.net/article/details/147196822)
9. [\[dp9_子数组\] 单词拆分 | 环绕字符串中唯一的子字符串](https://lvynote.blog.csdn.net/article/details/147197123)
10. [\[dp10_子序列\] 最长递增子序列 | 摆动序列 | 最长递增子序列的个数](https://lvynote.blog.csdn.net/article/details/147209933)
11. [\[dp11_最长子序列\(不连续\)\] 最长数对链 | 最长定差子序列 | 最长的斐波那契子序列的长度](https://lvynote.blog.csdn.net/article/details/147227513)
12. [\[dp12_回文子串\] 最长回文子串 | 分割回文串 IV](https://lvynote.blog.csdn.net/article/details/147223002)
13. [\[dp_13\] 最长等差数列\(len\) | 等差数列划分 II - 子序列\(num\)](https://lvynote.blog.csdn.net/article/details/147249758)
14. [\[dp14_回文串\] 分割回文串 II | 最长回文子序列 | 让字符串成为回文串的最少插入次数](https://lvynote.blog.csdn.net/article/details/147283142)
15. [\[dp15_两个数组/二维\] 最长公共子序列 | 不相交的线 | 不同的子序列 | 再论动态规划](https://lvynote.blog.csdn.net/article/details/147303748)
16. [\[dp16_两个数组\] 通配符匹配 | 交错字符串 | 两个字符串的最小ASCII删除和](https://lvynote.blog.csdn.net/article/details/147312970)
17. [\[dp17_两个数组\] 正则表达式匹配 | 最长重复子数组](https://lvynote.blog.csdn.net/article/details/147333088)
18. [\[dp18_背包问题\] 介绍 | 01背包 | 分割等和子集](https://lvynote.blog.csdn.net/article/details/147340192)
19. [\[dp19_01背包\] 目标和 | 最后一块石头的重量 II](https://lvynote.blog.csdn.net/article/details/147350631)
20. [\[dp20_完全背包\] 介绍 | 零钱兑换](https://lvynote.blog.csdn.net/article/details/147353087)
21. [\[dp21_完全背包\] 零钱兑换 II | 完全平方数](https://lvynote.blog.csdn.net/article/details/147361030)
22. [\[dp22_二维背包\] 一和零 | 盈利计划](https://lvynote.blog.csdn.net/article/details/147366232)
23. [\[dp23_似包非包\] 组合总和 Ⅳ | 不同的二叉搜索树 | 卡特兰数](https://lvynote.blog.csdn.net/article/details/147374698)

> tips: 多刷题多体会~

#### 贪心算法

- 与其说是贪心算法，不如说是贪心策略。

贪心策略：解决问题的策略( 局部最优 —> 全局最优)。

- 把解决问题的过程分为若干步；
- 解决每一步的时候，都选择当前看起来 “最优的” 解法；
- “希望” 得到全局最优解。

遇到不会的贪心题，很正常，把心态放平。

1. 前期学习的时候，把重点放在贪心的策略上，把这个策略当成经验吸收。往后遇到相同类型的题目时可以用经验去解决这道问题。
2. 当知道贪心是正确的时候，要想到如何去证明。

可以从[\[贪心_1\] 介绍 | 柠檬水找零](https://lvynote.blog.csdn.net/article/details/147386582)等题目入手，体会贪心策略如何落地。

[贪心算法]

1. [\[贪心_1\] 介绍 | 柠檬水找零](https://lvynote.blog.csdn.net/article/details/147386582)
2. [\[贪心_2\] \(含证明\)将数组和减半的最少操作次数 | 最大数](https://lvynote.blog.csdn.net/article/details/147398154)
3. [\[贪心_3\] 摆动序列 | 最长递增子序列](https://lvynote.blog.csdn.net/article/details/147422746)
4. [\[贪心_4\] 递增的三元子序列 | 最长连续递增序列 | 买卖股票的最佳时机 | & ||](https://lvynote.blog.csdn.net/article/details/147457750)
5. [\[贪心_5\] K 次取反后最大化的数组和 | 按身高排序](https://lvynote.blog.csdn.net/article/details/147475655)
6. [\[贪心_6\] 田忌赛马 | 最长回文串 | 增减字符串匹配 | 分发饼干](https://lvynote.blog.csdn.net/article/details/147500909)
7. [\[贪心_7\] 最优除法 | 跳跃游戏 II | 加油站](https://lvynote.blog.csdn.net/article/details/147518447)
8. [\[贪心_8\] 跳跃游戏 | 单调递增的数字 | 坏了的计算器](https://lvynote.blog.csdn.net/article/details/147528980)
9. [\[贪心_9\] 合并区间 | 无重叠区间 | 用最少数量的箭引爆气球](https://lvynote.blog.csdn.net/article/details/147539504)

按题型整理思路，记录解题步骤与常见坑点，形成可复用的知识框架。

**笔记思路：** 可以参考这篇文章中t4数据流的中位数的梳理方法 [\[Lc14_priority_queue\] 最后一块石头重量 | 数据流中的第 K 大元素 | 前K个高频单词 | 数据流的中位数](https://lvynote.blog.csdn.net/article/details/146329248)

> tips:记录的时候可以多思考，可能写一篇需要3-4个小时，但在之后刷题中可提效远不止3-4小时

### 好用的笔记工具

- **draw.io**
  电脑绘图工具：写笔记的时候思考如何清晰地让别人也可以看懂，可以帮助更好地理解学习。
  示例图：
  ![draw.io 示例](./png/draw_io_test.png)
- **xmind**
  导图工具：以前几天每日一题中的区间贪心为例，可以借助导图清晰梳理题解（参考 [\[贪心_9\] 合并区间 | 无重叠区间 | 用最少数量的箭引爆气球](https://lvynote.blog.csdn.net/article/details/147539504)）。
- **Goodnotes**
  iPad 手绘工具：多种颜色画笔，可以清晰地对下面2个部分进行写写画画。

  1. 写代码前：模拟代码，例如 [N 皇后 | 有效的数独](https://lvynote.blog.csdn.net/article/details/146631296)。
  2. 写代码后：梳理代码，以 [正则表达式匹配](https://lvynote.blog.csdn.net/article/details/147333088) 为例，提炼关键状态转移并总结心得。
- **LICEcup**
  录屏 gif 动图，可用于演示 [递增的三元子序列 | 最长连续递增序列 | 买卖股票的最佳时机](https://lvynote.blog.csdn.net/article/details/147457750) 等题目的贪心过程。

### 2. 定期复习

复习是一件随时都可以做的事情，手机写代码不是很方便，可以想到的时候用来看代码，给代码做注释，就像是和代码二次对话一样

### 3. 刷题练习

“工欲善其事必先利其器”，配置好环境可以让坐在电脑前刷题变的更加快乐：[VSCode配置LeetCode调试环境](https://lvynote.blog.csdn.net/article/details/145949237)（I love vscode）

题单：灵神的伟大无需多言(ㄒoㄒ）[分享｜如何科学刷题？](https://leetcode.cn/discuss/post/3141566/ru-he-ke-xue-shua-ti-by-endlesscheng-q3yd/)

## 碎碎念

脑袋刷卡了可以换一件事情做，可以去 跑步/打球/ 游泳/爬山/组乐队/发呆...尽量从电子设备抽离，接触现实世界

(偶尔steam也行，可以进入到另一个世界，如果长时间看屏幕注意滴眼药水保护视力

学会放松和学会刷题一样重要，健康的身心才可以更好的去做喜欢的事情

---------

### 使用指南

- git clone 到本地，用 Typora 打开，可以直接对源.md文件进行自己的批注
- 所有笔记 & 代码均为开源，支持自由获取/引用/改造，二创可以fork一份

tips:如果没使用过 GitHub，复制仓库链接给 AI 并提问——“我该如何把这个仓库 clone 到本地使用”，碰到问题继续追问 AI，刚好实践学一下GitHub使用方法~

-----

### co-creation

好的模板大家可以在仓库中分享开源出来 共同学习进步

way:fork一份，在templates文件夹下创建自己name的子文件，就可以从0开始维护自己的算法模板啦

templates部分包含各种算法模板，欢迎大家提issue/pr/email me: 开源自己的算法模板/补充想法/提出问题/完善提单/学习交流...

如果你也想为这个仓库做一些贡献，可以pr提交一些完善/模板后email me become contributors~

## Contributors

Thank you to all the people who have already contributed to this repo templates

[![Contributors](https://contrib.rocks/image?repo=lvy010/leetcode)](https://github.com/lvy010/leetcode/graphs/contributors)


## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=lvy010/leetcode&type=Date)](https://star-history.com/#lvy010/leetcode&Date)

------
## 算法之外(in process)

后续计划对系列文章进行总结整理，更新至repo:[X-Plore](https://github.com/lvy010/ThoughtMap)/从零开始的X学习之路 下

内容比较多，需要一些时间，可以先mark一下，有什么感兴趣的想先看到，可以在issue中对↓专栏文章进行选题投票(in process)

![x](./png/x.png)

### example content 

#### 从零开始的Linux学习之路

![Linux](./png/linux.png)

#### 从零开始的LLM学习之路

![LLM](./png/llm.png)

#### 从零开始的Redis学习之路

![Redis](./png/redis.png)

#### 从零开始的CUDA学习之路

![CUDA](./png/cuda.png)

... ...(more)

**期待一切有助于学习&进步的建议与共创~可以直接提issue/email me**

-------
附录：
"那一天,人们回想起了这个仓库的起因,那篇被删掉的文章..."
仓库由来：[leetcode题单分享_第一版完整的原文截图](./other/Share_the_original_text.md)原文因为一些原因已经不存在了，这是一份备份。
