mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 23:28:29 +08:00
Update
This commit is contained in:
23
README.md
23
README.md
@ -112,14 +112,24 @@
|
|||||||
|
|
||||||
(持续更新中.....)
|
(持续更新中.....)
|
||||||
|
|
||||||
|
## 备战秋招
|
||||||
|
|
||||||
|
1. [选择方向的时候,我也迷茫了](https://mp.weixin.qq.com/s/ZCzFiAHZHLqHPLJQXNm75g)
|
||||||
|
2. [刷题就用库函数了,怎么了?](https://mp.weixin.qq.com/s/6K3_OSaudnHGq2Ey8vqYfg)
|
||||||
|
3. [关于实习,大家可能有点迷茫!](https://mp.weixin.qq.com/s/xcxzi7c78kQGjvZ8hh7taA)
|
||||||
|
4. [马上秋招了,慌得很!](https://mp.weixin.qq.com/s/7q7W8Cb2-a5U5atZdOnOFA)
|
||||||
|
5. [Carl看了上百份简历,总结了这些!](https://mp.weixin.qq.com/s/sJa87MZD28piCOVMFkIbwQ)
|
||||||
|
6. [面试中遇到了发散性问题.....](https://mp.weixin.qq.com/s/SSonDxi2pjkSVwHNzZswng)
|
||||||
|
|
||||||
## 数组
|
## 数组
|
||||||
|
|
||||||
1. [数组过于简单,但你该了解这些!](./problems/数组理论基础.md)
|
1. [数组过于简单,但你该了解这些!](./problems/数组理论基础.md)
|
||||||
2. [数组:每次遇到二分法,都是一看就会,一写就废](./problems/0704.二分查找.md)
|
2. [数组:每次遇到二分法,都是一看就会,一写就废](./problems/0704.二分查找.md)
|
||||||
3. [数组:就移除个元素很难么?](./problems/0027.移除元素.md)
|
3. [数组:就移除个元素很难么?](./problems/0027.移除元素.md)
|
||||||
4. [数组:滑动窗口拯救了你](./problems/0209.长度最小的子数组.md)
|
4. [数组:有序数组的平方,还有序么?](./problems/0977.有序数组的平方.md)
|
||||||
5. [数组:这个循环可以转懵很多人!](./problems/0059.螺旋矩阵II.md)
|
5. [数组:滑动窗口拯救了你](./problems/0209.长度最小的子数组.md)
|
||||||
6. [数组:总结篇](./problems/数组总结篇.md)
|
6. [数组:这个循环可以转懵很多人!](./problems/0059.螺旋矩阵II.md)
|
||||||
|
7. [数组:总结篇](./problems/数组总结篇.md)
|
||||||
|
|
||||||
## 链表
|
## 链表
|
||||||
|
|
||||||
@ -292,6 +302,7 @@
|
|||||||
|
|
||||||
动态规划专题已经开始啦,来不及解释了,小伙伴们上车别掉队!
|
动态规划专题已经开始啦,来不及解释了,小伙伴们上车别掉队!
|
||||||
|
|
||||||
|
<img src='https://code-thinking.cdn.bcebos.com/pics/动态规划-总结大纲.jpg' width=500 alt='背包问题大纲'> </img></div>
|
||||||
1. [关于动态规划,你该了解这些!](./problems/动态规划理论基础.md)
|
1. [关于动态规划,你该了解这些!](./problems/动态规划理论基础.md)
|
||||||
2. [动态规划:斐波那契数](./problems/0509.斐波那契数.md)
|
2. [动态规划:斐波那契数](./problems/0509.斐波那契数.md)
|
||||||
3. [动态规划:爬楼梯](./problems/0070.爬楼梯.md)
|
3. [动态规划:爬楼梯](./problems/0070.爬楼梯.md)
|
||||||
@ -366,6 +377,7 @@
|
|||||||
52. [为了绝杀编辑距离,Carl做了三步铺垫,你都知道么?](./problems/为了绝杀编辑距离,卡尔做了三步铺垫.md)
|
52. [为了绝杀编辑距离,Carl做了三步铺垫,你都知道么?](./problems/为了绝杀编辑距离,卡尔做了三步铺垫.md)
|
||||||
53. [动态规划:回文子串](./problems/0647.回文子串.md)
|
53. [动态规划:回文子串](./problems/0647.回文子串.md)
|
||||||
54. [动态规划:最长回文子序列](./problems/0516.最长回文子序列.md)
|
54. [动态规划:最长回文子序列](./problems/0516.最长回文子序列.md)
|
||||||
|
55. [动态规划总结篇](./problems/动态规划总结篇.md)
|
||||||
|
|
||||||
|
|
||||||
(持续更新中....)
|
(持续更新中....)
|
||||||
@ -390,12 +402,7 @@
|
|||||||
|
|
||||||
[各类基础算法模板](https://github.com/youngyangyang04/leetcode/blob/master/problems/算法模板.md)
|
[各类基础算法模板](https://github.com/youngyangyang04/leetcode/blob/master/problems/算法模板.md)
|
||||||
|
|
||||||
# 备战秋招
|
|
||||||
|
|
||||||
1. [技术比较弱,也对技术不感兴趣,如何选择方向?](https://mp.weixin.qq.com/s/ZCzFiAHZHLqHPLJQXNm75g)
|
|
||||||
2. [刷题就用库函数了,怎么了?](https://mp.weixin.qq.com/s/6K3_OSaudnHGq2Ey8vqYfg)
|
|
||||||
3. [关于实习,大家可能有点迷茫!](https://mp.weixin.qq.com/s/xcxzi7c78kQGjvZ8hh7taA)
|
|
||||||
4. [马上秋招了,慌得很!](https://mp.weixin.qq.com/s/7q7W8Cb2-a5U5atZdOnOFA)
|
|
||||||
|
|
||||||
# B站算法视频讲解
|
# B站算法视频讲解
|
||||||
|
|
||||||
|
@ -29,17 +29,17 @@ https://leetcode-cn.com/problems/two-sum/
|
|||||||
很明显暴力的解法是两层for循环查找,时间复杂度是O(n^2)。
|
很明显暴力的解法是两层for循环查找,时间复杂度是O(n^2)。
|
||||||
|
|
||||||
建议大家做这道题目之前,先做一下这两道
|
建议大家做这道题目之前,先做一下这两道
|
||||||
* [242. 有效的字母异位词](https://mp.weixin.qq.com/s/vM6OszkM6L1Mx2Ralm9Dig)
|
* [242. 有效的字母异位词](https://mp.weixin.qq.com/s/ffS8jaVFNUWyfn_8T31IdA)
|
||||||
* [349. 两个数组的交集](https://mp.weixin.qq.com/s/N9iqAchXreSVW7zXUS4BVA)
|
* [349. 两个数组的交集](https://mp.weixin.qq.com/s/aMSA5zrp3jJcLjuSB0Es2Q)
|
||||||
|
|
||||||
[242. 有效的字母异位词](https://mp.weixin.qq.com/s/vM6OszkM6L1Mx2Ralm9Dig) 这道题目是用数组作为哈希表来解决哈希问题,[349. 两个数组的交集](https://mp.weixin.qq.com/s/N9iqAchXreSVW7zXUS4BVA)这道题目是通过set作为哈希表来解决哈希问题。
|
[242. 有效的字母异位词](https://mp.weixin.qq.com/s/ffS8jaVFNUWyfn_8T31IdA) 这道题目是用数组作为哈希表来解决哈希问题,[349. 两个数组的交集](https://mp.weixin.qq.com/s/aMSA5zrp3jJcLjuSB0Es2Q)这道题目是通过set作为哈希表来解决哈希问题。
|
||||||
|
|
||||||
本题呢,则要使用map,那么来看一下使用数组和set来做哈希法的局限。
|
本题呢,则要使用map,那么来看一下使用数组和set来做哈希法的局限。
|
||||||
|
|
||||||
* 数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
|
* 数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
|
||||||
* set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下标位置,因为要返回x 和 y的下标。所以set 也不能用。
|
* set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下表位置,因为要返回x 和 y的下表。所以set 也不能用。
|
||||||
|
|
||||||
此时就要选择另一种数据结构:map ,map是一种key value的存储结构,可以用key保存数值,用value在保存数值所在的下标。
|
此时就要选择另一种数据结构:map ,map是一种key value的存储结构,可以用key保存数值,用value在保存数值所在的下表。
|
||||||
|
|
||||||
C++中map,有三种类型:
|
C++中map,有三种类型:
|
||||||
|
|
||||||
@ -51,13 +51,12 @@ C++中map,有三种类型:
|
|||||||
|
|
||||||
std::unordered_map 底层实现为哈希表,std::map 和std::multimap 的底层实现是红黑树。
|
std::unordered_map 底层实现为哈希表,std::map 和std::multimap 的底层实现是红黑树。
|
||||||
|
|
||||||
同理,std::map 和std::multimap 的key也是有序的(这个问题也经常作为面试题,考察对语言容器底层的理解)。 更多哈希表的理论知识请看[关于哈希表,你该了解这些!](https://mp.weixin.qq.com/s/g8N6WmoQmsCUw3_BaWxHZA)。
|
同理,std::map 和std::multimap 的key也是有序的(这个问题也经常作为面试题,考察对语言容器底层的理解)。 更多哈希表的理论知识请看[关于哈希表,你该了解这些!](https://mp.weixin.qq.com/s/RSUANESA_tkhKhYe3ZR8Jg)。
|
||||||
|
|
||||||
**这道题目中并不需要key有序,选择std::unordered_map 效率更高!**
|
**这道题目中并不需要key有序,选择std::unordered_map 效率更高!**
|
||||||
|
|
||||||
解题思路动画如下:
|
解题思路动画如下:
|
||||||
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
|
@ -105,8 +105,7 @@ public:
|
|||||||
|
|
||||||
时间复杂度:O(n^2)。
|
时间复杂度:O(n^2)。
|
||||||
|
|
||||||
|
C++代码代码如下:
|
||||||
## 双指针法C++代码
|
|
||||||
|
|
||||||
```C++
|
```C++
|
||||||
class Solution {
|
class Solution {
|
||||||
@ -163,13 +162,14 @@ public:
|
|||||||
|
|
||||||
# 思考题
|
# 思考题
|
||||||
|
|
||||||
既然三数之和可以使用双指针法,我们之前讲过的[两数之和](https://mp.weixin.qq.com/s/uVAtjOHSeqymV8FeQbliJQ),可不可以使用双指针法呢?
|
|
||||||
|
既然三数之和可以使用双指针法,我们之前讲过的[1.两数之和](https://mp.weixin.qq.com/s/vaMsLnH-f7_9nEK4Cuu3KQ),可不可以使用双指针法呢?
|
||||||
|
|
||||||
如果不能,题意如何更改就可以使用双指针法呢? **大家留言说出自己的想法吧!**
|
如果不能,题意如何更改就可以使用双指针法呢? **大家留言说出自己的想法吧!**
|
||||||
|
|
||||||
两数之和 就不能使用双指针法,因为[两数之和](https://mp.weixin.qq.com/s/uVAtjOHSeqymV8FeQbliJQ)要求返回的是索引下表, 而双指针法一定要排序,一旦排序之后原数组的索引就被改变了。
|
两数之和 就不能使用双指针法,因为[1.两数之和](https://mp.weixin.qq.com/s/vaMsLnH-f7_9nEK4Cuu3KQ)要求返回的是索引下表, 而双指针法一定要排序,一旦排序之后原数组的索引就被改变了。
|
||||||
|
|
||||||
如果[两数之和](https://mp.weixin.qq.com/s/uVAtjOHSeqymV8FeQbliJQ)要求返回的是数值的话,就可以使用双指针法了。
|
如果[1.两数之和](https://mp.weixin.qq.com/s/vaMsLnH-f7_9nEK4Cuu3KQ)要求返回的是数值的话,就可以使用双指针法了。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
## 72. 编辑距离
|
## 72. 编辑距离
|
||||||
|
|
||||||
|
https://leetcode-cn.com/problems/edit-distance/
|
||||||
|
|
||||||
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
|
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
|
||||||
|
|
||||||
你可以对一个单词进行如下三种操作:
|
你可以对一个单词进行如下三种操作:
|
||||||
@ -16,23 +18,23 @@
|
|||||||
* 删除一个字符
|
* 删除一个字符
|
||||||
* 替换一个字符
|
* 替换一个字符
|
||||||
|
|
||||||
示例 1:
|
示例 1:
|
||||||
输入:word1 = "horse", word2 = "ros"
|
输入:word1 = "horse", word2 = "ros"
|
||||||
输出:3
|
输出:3
|
||||||
解释:
|
解释:
|
||||||
horse -> rorse (将 'h' 替换为 'r')
|
horse -> rorse (将 'h' 替换为 'r')
|
||||||
rorse -> rose (删除 'r')
|
rorse -> rose (删除 'r')
|
||||||
rose -> ros (删除 'e')
|
rose -> ros (删除 'e')
|
||||||
|
|
||||||
示例 2:
|
示例 2:
|
||||||
输入:word1 = "intention", word2 = "execution"
|
输入:word1 = "intention", word2 = "execution"
|
||||||
输出:5
|
输出:5
|
||||||
解释:
|
解释:
|
||||||
intention -> inention (删除 't')
|
intention -> inention (删除 't')
|
||||||
inention -> enention (将 'i' 替换为 'e')
|
inention -> enention (将 'i' 替换为 'e')
|
||||||
enention -> exention (将 'n' 替换为 'x')
|
enention -> exention (将 'n' 替换为 'x')
|
||||||
exention -> exection (将 'n' 替换为 'c')
|
exention -> exection (将 'n' 替换为 'c')
|
||||||
exection -> execution (插入 'u')
|
exection -> execution (插入 'u')
|
||||||
|
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
题目数据保证答案符合 32 位带符号整数范围。
|
题目数据保证答案符合 32 位带符号整数范围。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
|
|
||||||
|
@ -16,14 +16,14 @@
|
|||||||
|
|
||||||
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
|
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
|
||||||
|
|
||||||
示例 1:
|
示例 1:
|
||||||
输入:[7,1,5,3,6,4]
|
输入:[7,1,5,3,6,4]
|
||||||
输出:5
|
输出:5
|
||||||
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
|
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
|
||||||
|
|
||||||
示例 2:
|
示例 2:
|
||||||
输入:prices = [7,6,4,3,1]
|
输入:prices = [7,6,4,3,1]
|
||||||
输出:0
|
输出:0
|
||||||
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
|
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
|
||||||
|
|
||||||
|
|
||||||
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
这道题目最直观的想法,就是暴力,找最优间距了。
|
这道题目最直观的想法,就是暴力,找最优间距了。
|
||||||
|
|
||||||
```
|
```C++
|
||||||
class Solution {
|
class Solution {
|
||||||
public:
|
public:
|
||||||
int maxProfit(vector<int>& prices) {
|
int maxProfit(vector<int>& prices) {
|
||||||
|
@ -101,9 +101,9 @@ dp[i][4] = max(dp[i - 1][4], dp[i - 1][3] + prices[i]);
|
|||||||
|
|
||||||
所以dp[0][2] = 0;
|
所以dp[0][2] = 0;
|
||||||
|
|
||||||
第0天第二次买入操作,初始值应该是多少呢?
|
第0天第二次买入操作,初始值应该是多少呢?应该不少同学疑惑,第一次还没买入呢,怎么初始化第二次买入呢?
|
||||||
|
|
||||||
不用管第几次,现在手头上没有现金,只要买入,现金就做相应的减少。
|
第二次买入依赖于第一次卖出的状态,其实相当于第0天第一次买入了,第一次卖出了,然后在买入一次(第二次买入),那么现在手头上没有现金,只要买入,现金就做相应的减少。
|
||||||
|
|
||||||
所以第二次买入操作,初始化为:dp[0][3] = -prices[0];
|
所以第二次买入操作,初始化为:dp[0][3] = -prices[0];
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
<a href="https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ"><img src="https://img.shields.io/badge/知识星球-代码随想录-blue" alt=""></a>
|
<a href="https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ"><img src="https://img.shields.io/badge/知识星球-代码随想录-blue" alt=""></a>
|
||||||
</p>
|
</p>
|
||||||
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
|
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
|
||||||
# 动态规划:分割等和子集可以用01背包!
|
|
||||||
|
|
||||||
## 416. 分割等和子集
|
## 416. 分割等和子集
|
||||||
|
|
||||||
@ -29,6 +28,10 @@
|
|||||||
输出: false
|
输出: false
|
||||||
解释: 数组不能分割成两个元素和相等的子集.
|
解释: 数组不能分割成两个元素和相等的子集.
|
||||||
|
|
||||||
|
提示:
|
||||||
|
* 1 <= nums.length <= 200
|
||||||
|
* 1 <= nums[i] <= 100
|
||||||
|
|
||||||
## 思路
|
## 思路
|
||||||
|
|
||||||
这道题目初步看,是如下两题几乎是一样的,大家可以用回溯法,解决如下两题
|
这道题目初步看,是如下两题几乎是一样的,大家可以用回溯法,解决如下两题
|
||||||
@ -174,7 +177,7 @@ public:
|
|||||||
|
|
||||||
这道题目就是一道01背包应用类的题目,需要我们拆解题目,然后套入01背包的场景。
|
这道题目就是一道01背包应用类的题目,需要我们拆解题目,然后套入01背包的场景。
|
||||||
|
|
||||||
01背包相对于本题,主要要理解,题目中物品是nums[i],重量是nums[i]i,价值也是nums[i],背包体积是sum/2。
|
01背包相对于本题,主要要理解,题目中物品是nums[i],重量是nums[i],价值也是nums[i],背包体积是sum/2。
|
||||||
|
|
||||||
看代码的话,就可以发现,基本就是按照01背包的写法来的。
|
看代码的话,就可以发现,基本就是按照01背包的写法来的。
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ public:
|
|||||||
|
|
||||||
**此时遍历B数组的时候,就要从后向前遍历,这样避免重复覆盖**。
|
**此时遍历B数组的时候,就要从后向前遍历,这样避免重复覆盖**。
|
||||||
|
|
||||||
```
|
```C++
|
||||||
class Solution {
|
class Solution {
|
||||||
public:
|
public:
|
||||||
int findLength(vector<int>& A, vector<int>& B) {
|
int findLength(vector<int>& A, vector<int>& B) {
|
||||||
|
140
problems/动态规划总结篇.md
Normal file
140
problems/动态规划总结篇.md
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://mp.weixin.qq.com/s/RsdcQ9umo09R6cfnwXZlrQ"><img src="https://img.shields.io/badge/PDF下载-代码随想录-blueviolet" alt=""></a>
|
||||||
|
<a href="https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw"><img src="https://img.shields.io/badge/刷题-微信群-green" alt=""></a>
|
||||||
|
<a href="https://space.bilibili.com/525438321"><img src="https://img.shields.io/badge/B站-代码随想录-orange" alt=""></a>
|
||||||
|
<a href="https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ"><img src="https://img.shields.io/badge/知识星球-代码随想录-blue" alt=""></a>
|
||||||
|
</p>
|
||||||
|
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
|
||||||
|
|
||||||
|
|
||||||
|
如今动态规划已经讲解了42道经典题目,共50篇文章,是时候做一篇总结了。
|
||||||
|
|
||||||
|
关于动态规划,在专题第一篇[关于动态规划,你该了解这些!](https://mp.weixin.qq.com/s/ocZwfPlCWrJtVGACqFNAag)就说了动规五部曲,**而且强调了五部对解动规题目至关重要!**
|
||||||
|
|
||||||
|
这是Carl做过一百多道动规题目总结出来的经验结晶啊,如果大家跟着「代码随想哦」刷过动规专题,一定会对这动规五部曲的作用感受极其深刻。
|
||||||
|
|
||||||
|
动规五部曲分别为:
|
||||||
|
|
||||||
|
1. 确定dp数组(dp table)以及下标的含义
|
||||||
|
2. 确定递推公式
|
||||||
|
3. dp数组如何初始化
|
||||||
|
4. 确定遍历顺序
|
||||||
|
5. 举例推导dp数组
|
||||||
|
|
||||||
|
动规专题刚开始的时候,讲的题目比较简单,不少录友和我反应:这么简单的题目 讲的复杂了,不用那么多步骤分析,想出递推公式直接就AC这道题目了。
|
||||||
|
|
||||||
|
**Carl的观点一直都是 简单题是用来 巩固方法论的**。 简单题目是可以靠感觉,但后面稍稍难一点的题目,估计感觉就不好使了。
|
||||||
|
|
||||||
|
在动规专题讲解中,也充分体现出,这动规五部曲的重要性。
|
||||||
|
|
||||||
|
还有不少录友对动规的理解是:递推公式是才是最难最重要的,只要想出递归公式,其他都好办。
|
||||||
|
|
||||||
|
**其实这么想的同学基本对动规理解的不到位的**。
|
||||||
|
|
||||||
|
动规五部曲里,哪一部没想清楚,这道题目基本就做不出来,即使做出来了也没有想清楚,而是朦朦胧胧的就把题目过了。
|
||||||
|
|
||||||
|
* 如果想不清楚dp数组的具体含义,递归公式从何谈起,甚至初始化的时候就写错了。
|
||||||
|
* 例如[动态规划:不同路径还不够,要有障碍!](https://mp.weixin.qq.com/s/lhqF0O4le9-wvalptOVOww) 在这道题目中,初始化才是重头戏
|
||||||
|
* 如果看过背包系列,特别是完全背包,那么两层for循环先后顺序绝对可以搞懵很多人,反而递归公式是简单的。
|
||||||
|
* 至于推导dp数组的重要性,动规专题里几乎每篇Carl都反复强调,当程序结果不对的时候,一定要自己推导公式,看看和程序打印的日志是否一样。
|
||||||
|
|
||||||
|
好啦,我们再一起回顾一下,动态规划专题中我们都讲了哪些内容。
|
||||||
|
|
||||||
|
## 动划基础
|
||||||
|
|
||||||
|
* [关于动态规划,你该了解这些!](https://mp.weixin.qq.com/s/ocZwfPlCWrJtVGACqFNAag)
|
||||||
|
* [动态规划:斐波那契数](https://mp.weixin.qq.com/s/ko0zLJplF7n_4TysnPOa_w)
|
||||||
|
* [动态规划:爬楼梯](https://mp.weixin.qq.com/s/Ohop0jApSII9xxOMiFhGIw)
|
||||||
|
* [动态规划:使用最小花费爬楼梯](https://mp.weixin.qq.com/s/djZB9gkyLFAKcQcSvKDorA)
|
||||||
|
* [动态规划:不同路径](https://mp.weixin.qq.com/s/MGgGIt4QCpFMROE9X9he_A)
|
||||||
|
* [动态规划:不同路径还不够,要有障碍!](https://mp.weixin.qq.com/s/lhqF0O4le9-wvalptOVOww)
|
||||||
|
* [动态规划:整数拆分,你要怎么拆?](https://mp.weixin.qq.com/s/cVbyHrsWH_Rfzlj-ESr01A)
|
||||||
|
* [动态规划:不同的二叉搜索树](https://mp.weixin.qq.com/s/8VE8pDrGxTf8NEVYBDwONw)
|
||||||
|
|
||||||
|
## 背包问题系列
|
||||||
|
|
||||||
|
<img src='https://code-thinking.cdn.bcebos.com/pics/动态规划-背包问题总结.png' width=500 alt='背包问题大纲'> </img></div>
|
||||||
|
|
||||||
|
* [动态规划:关于01背包问题,你该了解这些!](https://mp.weixin.qq.com/s/FwIiPPmR18_AJO5eiidT6w)
|
||||||
|
* [动态规划:关于01背包问题,你该了解这些!(滚动数组)](https://mp.weixin.qq.com/s/M4uHxNVKRKm5HPjkNZBnFA)
|
||||||
|
* [动态规划:分割等和子集可以用01背包!](https://mp.weixin.qq.com/s/sYw3QtPPQ5HMZCJcT4EaLQ)
|
||||||
|
* [动态规划:最后一块石头的重量 II](https://mp.weixin.qq.com/s/WbwAo3jaUaNJjvhHgq0BGg)
|
||||||
|
* [动态规划:目标和!](https://mp.weixin.qq.com/s/2pWmaohX75gwxvBENS-NCw)
|
||||||
|
* [动态规划:一和零!](https://mp.weixin.qq.com/s/x-u3Dsp76DlYqtCe0xEKJw)
|
||||||
|
* [动态规划:关于完全背包,你该了解这些!](https://mp.weixin.qq.com/s/akwyxlJ4TLvKcw26KB9uJw)
|
||||||
|
* [动态规划:给你一些零钱,你要怎么凑?](https://mp.weixin.qq.com/s/PlowDsI4WMBOzf3q80AksQ)
|
||||||
|
* [动态规划:Carl称它为排列总和!](https://mp.weixin.qq.com/s/Iixw0nahJWQgbqVNk8k6gA)
|
||||||
|
* [动态规划:以前我没得选,现在我选择再爬一次!](https://mp.weixin.qq.com/s/e_wacnELo-2PG76EjrUakA)
|
||||||
|
* [动态规划: 给我个机会,我再兑换一次零钱](https://mp.weixin.qq.com/s/dyk-xNilHzNtVdPPLObSeQ)
|
||||||
|
* [动态规划:一样的套路,再求一次完全平方数](https://mp.weixin.qq.com/s/VfJT78p7UGpDZsapKF_QJQ)
|
||||||
|
* [动态规划:单词拆分](https://mp.weixin.qq.com/s/3Spx1B6MbIYjS8YkVbByzA)
|
||||||
|
* [动态规划:关于多重背包,你该了解这些!](https://mp.weixin.qq.com/s/b-UUUmbvG7URWyCjQkiuuQ)
|
||||||
|
* [听说背包问题很难? 这篇总结篇来拯救你了](https://mp.weixin.qq.com/s/ZOehl3U1mDiyOQjFG1wNJA)
|
||||||
|
|
||||||
|
## 打家劫舍系列
|
||||||
|
|
||||||
|
* [动态规划:开始打家劫舍!](https://mp.weixin.qq.com/s/UZ31WdLEEFmBegdgLkJ8Dw)
|
||||||
|
* [动态规划:继续打家劫舍!](https://mp.weixin.qq.com/s/kKPx4HpH3RArbRcxAVHbeQ)
|
||||||
|
* [动态规划:还要打家劫舍!](https://mp.weixin.qq.com/s/BOJ1lHsxbQxUZffXlgglEQ)
|
||||||
|
|
||||||
|
## 股票系列
|
||||||
|
|
||||||
|
<img src='https://code-thinking.cdn.bcebos.com/pics/股票问题总结.jpg' width=500 alt='股票问题总结'> </img></div>
|
||||||
|
|
||||||
|
* [动态规划:买卖股票的最佳时机](https://mp.weixin.qq.com/s/keWo5qYJY4zmHn3amfXdfQ)
|
||||||
|
* [动态规划:本周我们都讲了这些(系列六)](https://mp.weixin.qq.com/s/GVu-6eF0iNkpVDKRXTPOTA)
|
||||||
|
* [动态规划:买卖股票的最佳时机II](https://mp.weixin.qq.com/s/d4TRWFuhaY83HPa6t5ZL-w)
|
||||||
|
* [动态规划:买卖股票的最佳时机III](https://mp.weixin.qq.com/s/Sbs157mlVDtAR0gbLpdKzg)
|
||||||
|
* [动态规划:买卖股票的最佳时机IV](https://mp.weixin.qq.com/s/jtxZJWAo2y5sUsW647Z5cw)
|
||||||
|
* [动态规划:最佳买卖股票时机含冷冻期](https://mp.weixin.qq.com/s/TczJGFAPnkjH9ET8kwH1OA)
|
||||||
|
* [动态规划:本周我们都讲了这些(系列七)](https://mp.weixin.qq.com/s/vdzDlrEvhXWRzblTnOnzKg)
|
||||||
|
* [动态规划:买卖股票的最佳时机含手续费](https://mp.weixin.qq.com/s/2Cd_uINjerZ25VHH0K2IBQ)
|
||||||
|
* [动态规划:股票系列总结篇](https://mp.weixin.qq.com/s/sC5XyEtDQWkonKnbCvZhDw)
|
||||||
|
|
||||||
|
## 子序列系列
|
||||||
|
|
||||||
|
<img src='https://code-thinking.cdn.bcebos.com/pics/动态规划-子序列问题总结.jpg' width=500 alt=''> </img></div>
|
||||||
|
|
||||||
|
* [动态规划:最长递增子序列](https://mp.weixin.qq.com/s/f8nLO3JGfgriXep_gJQpqQ)
|
||||||
|
* [动态规划:最长连续递增序列](https://mp.weixin.qq.com/s/c0Nn0TtjkTISVdqRsyMmyA)
|
||||||
|
* [动态规划:最长重复子数组](https://mp.weixin.qq.com/s/U5WaWqBwdoxzQDotOdWqZg)
|
||||||
|
* [动态规划:最长公共子序列](https://mp.weixin.qq.com/s/Qq0q4HaE4TyasCTj2WGFOg)
|
||||||
|
* [动态规划:不相交的线](https://mp.weixin.qq.com/s/krfYzSYEO8jIoVfyHzR0rw)
|
||||||
|
* [动态规划:最大子序和](https://mp.weixin.qq.com/s/2Xtyi2L4r8sM-BcxgUKmcA)
|
||||||
|
* [动态规划:判断子序列](https://mp.weixin.qq.com/s/2pjT4B4fjfOx5iB6N6xyng)
|
||||||
|
* [动态规划:不同的子序列](https://mp.weixin.qq.com/s/1SULY2XVSROtk_hsoVLu8A)
|
||||||
|
* [动态规划:两个字符串的删除操作](https://mp.weixin.qq.com/s/a8BerpqSf76DCqkPDJrpYg)
|
||||||
|
* [动态规划:编辑距离](https://mp.weixin.qq.com/s/8aG71XjSgZG6kZbiAdkJnQ)
|
||||||
|
* [为了绝杀编辑距离,我做了三步铺垫,你都知道么?](https://mp.weixin.qq.com/s/kbs4kCUzg8gPFttF9H3Yyw)
|
||||||
|
* [动态规划:回文子串](https://mp.weixin.qq.com/s/2WetyP6IYQ6VotegepVpEw)
|
||||||
|
* [动态规划:最长回文子序列](https://mp.weixin.qq.com/s/jbd3p4QPm5Kh1s2smTzWag)
|
||||||
|
|
||||||
|
|
||||||
|
## 动规结束语
|
||||||
|
|
||||||
|
关于动规,还有 树形DP(打家劫舍系列里有一道),数位DP,区间DP ,概率型DP,博弈型DP,状态压缩dp等等等,这些我就不去做讲解了,面试中出现的概率非常低。
|
||||||
|
|
||||||
|
能把本篇中列举的题目都研究通透的话,你的动规水平就已经非常高了。 对付面试已经足够!
|
||||||
|
|
||||||
|
这已经是全网对动规最深刻的讲解系列了。
|
||||||
|
|
||||||
|
**其实大家去网上搜一搜也可以发现,能把动态规划讲清楚的资料挺少的,因为动规确实很难!要给别人讲清楚更难!**
|
||||||
|
|
||||||
|
《剑指offer》上 动规的题目很少,经典的算法书籍《算法4》 没有讲 动规,而《算法导论》讲的动规基本属于劝退级别的。
|
||||||
|
|
||||||
|
讲清楚一道题容易,讲清楚两道题也容易,但把整个动态规划的各个分支讲清楚,每道题目讲通透,并用一套方法论把整个动规贯彻始终就非常难了。
|
||||||
|
|
||||||
|
所以Carl花费的这么大精力,把自己对动规算法理解 一五一十的全部分享给了录友们,帮助大家少走弯路!
|
||||||
|
|
||||||
|
**至于动态规划PDF,即将在公众号「代码随想录」全网首发!**
|
||||||
|
|
||||||
|
最后感谢录友们的一路支持,Carl才有继续更下去的动力[玫瑰],[撒花]
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
|
||||||
|
* B站视频:[代码随想录](https://space.bilibili.com/525438321)
|
||||||
|
* 知识星球:[代码随想录](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)
|
||||||
|
<div align="center"><img src=../pics/公众号.png width=450 alt=> </img></div>
|
||||||
|
|
Reference in New Issue
Block a user