Skip to content

Commit 6da4603

Browse files
committed
update content
1 parent 73d5818 commit 6da4603

File tree

68 files changed

+772
-772
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+772
-772
lines changed

README.md

+170-170
Large diffs are not rendered by default.

动态规划系列/LCS.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
不知道大家做算法题有什么感觉,**我总结出来做算法题的技巧就是,把大的问题细化到一个点,先研究在这个小的点上如何解决问题,然后再通过递归/迭代的方式扩展到整个问题**
2828

29-
比如说我们前文 [手把手带你刷二叉树第三期](https://labuladong.github.io/article/fname.html?fname=二叉树系列3),解决二叉树的题目,我们就会把整个问题细化到某一个节点上,想象自己站在某个节点上,需要做什么,然后套二叉树递归框架就行了。
29+
比如说我们前文 [手把手带你刷二叉树第三期](https://labuladong.online/algo/fname.html?fname=二叉树系列3),解决二叉树的题目,我们就会把整个问题细化到某一个节点上,想象自己站在某个节点上,需要做什么,然后套二叉树递归框架就行了。
3030

3131
动态规划系列问题也是一样,尤其是子序列相关的问题。**本文从「最长公共子序列问题」展开,总结三道子序列问题**,解这道题仔细讲讲这种子序列问题的套路,你就能感受到这种思维方式了。
3232

@@ -47,16 +47,16 @@ int longestCommonSubsequence(String s1, String s2);
4747

4848
显然,这种思路的复杂度非常高,你要穷举出所有子序列,这个复杂度就是指数级的,肯定不实际。
4949

50-
正确的思路是不要考虑整个字符串,而是细化到 `s1``s2` 的每个字符。前文 [子序列解题模板](https://labuladong.github.io/article/fname.html?fname=子序列问题模板) 中总结的一个规律:
50+
正确的思路是不要考虑整个字符串,而是细化到 `s1``s2` 的每个字符。前文 [子序列解题模板](https://labuladong.online/algo/fname.html?fname=子序列问题模板) 中总结的一个规律:
5151

5252

5353

5454
<hr>
5555
<details class="hint-container details">
5656
<summary><strong>引用本文的文章</strong></summary>
5757

58-
- [动态规划之子序列问题解题模板](https://labuladong.github.io/article/fname.html?fname=子序列问题模板)
59-
- [经典动态规划:编辑距离](https://labuladong.github.io/article/fname.html?fname=编辑距离)
58+
- [动态规划之子序列问题解题模板](https://labuladong.online/algo/fname.html?fname=子序列问题模板)
59+
- [经典动态规划:编辑距离](https://labuladong.online/algo/fname.html?fname=编辑距离)
6060

6161
</details><hr>
6262

@@ -67,7 +67,7 @@ int longestCommonSubsequence(String s1, String s2);
6767
<details class="hint-container details">
6868
<summary><strong>引用本文的题目</strong></summary>
6969

70-
<strong>安装 [我的 Chrome 刷题插件](https://labuladong.github.io/article/fname.html?fname=chrome插件简介) 点开下列题目可直接查看解题思路:</strong>
70+
<strong>安装 [我的 Chrome 刷题插件](https://labuladong.online/algo/intro/chrome/) 点开下列题目可直接查看解题思路:</strong>
7171

7272
| LeetCode | 力扣 |
7373
| :----: | :----: |
@@ -81,6 +81,6 @@ int longestCommonSubsequence(String s1, String s2);
8181

8282
**_____________**
8383

84-
本文为会员内容,请扫码关注公众号或 [点这里](https://labuladong.gitee.io/article/fname.html?fname=LCS) 查看:
84+
本文为会员内容,请扫码关注公众号或 [点这里](https://labuladong.online/algo/fname.html?fname=LCS) 查看:
8585

8686
![](https://labuladong.github.io/pictures/qrcode.jpg)

动态规划系列/动态规划之KMP字符匹配算法.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
::: tip
2525

26-
阅读本文之前,建议你先学习一下另一种字符串匹配算法:[Rabin Karp 字符匹配算法](https://labuladong.github.io/article/fname.html?fname=rabinkarp)
26+
阅读本文之前,建议你先学习一下另一种字符串匹配算法:[Rabin Karp 字符匹配算法](https://labuladong.online/algo/fname.html?fname=rabinkarp)
2727

2828
:::
2929

@@ -444,8 +444,8 @@ KMP 算法也就是动态规划那点事,我们的公众号文章目录有一
444444
<details class="hint-container details">
445445
<summary><strong>引用本文的文章</strong></summary>
446446

447-
- [我的刷题心得:算法的本质](https://labuladong.github.io/article/fname.html?fname=算法心得)
448-
- [滑动窗口算法延伸:Rabin Karp 字符匹配算法](https://labuladong.github.io/article/fname.html?fname=rabinkarp)
447+
- [我的刷题心得:算法的本质](https://labuladong.online/algo/fname.html?fname=算法心得)
448+
- [滑动窗口算法延伸:Rabin Karp 字符匹配算法](https://labuladong.online/algo/fname.html?fname=rabinkarp)
449449

450450
</details><hr>
451451

动态规划系列/动态规划之博弈问题.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
**-----------**
2424

25-
上一篇文章 [几道智力题](https://labuladong.github.io/article/fname.html?fname=一行代码解决的智力题) 中讨论到一个有趣的「石头游戏」,通过题目的限制条件,这个游戏是先手必胜的。但是智力题终究是智力题,真正的算法问题肯定不会是投机取巧能搞定的。所以,本文就借石头游戏来讲讲「假设两个人都足够聪明,最后谁会获胜」这一类问题该如何用动态规划算法解决。
25+
上一篇文章 [几道智力题](https://labuladong.online/algo/fname.html?fname=一行代码解决的智力题) 中讨论到一个有趣的「石头游戏」,通过题目的限制条件,这个游戏是先手必胜的。但是智力题终究是智力题,真正的算法问题肯定不会是投机取巧能搞定的。所以,本文就借石头游戏来讲讲「假设两个人都足够聪明,最后谁会获胜」这一类问题该如何用动态规划算法解决。
2626

2727
博弈类问题的套路都差不多,下文参考 [这个 YouTube 视频](https://www.youtube.com/watch?v=WxpIHvsu1RI) 的思路讲解,其核心思路是在二维 dp 的基础上使用元组分别存储两个人的博弈结果。掌握了这个技巧以后,别人再问你什么俩海盗分宝石,俩人拿硬币的问题,你就告诉别人:我懒得想,直接给你写个算法算一下得了。
2828

@@ -55,7 +55,7 @@ public boolean PredictTheWinner(int[] nums) {
5555
}
5656
```
5757

58-
这个 `stoneGame` 函数怎么写呢?博弈问题的难点在于,两个人要轮流进行选择,而且都贼精明,应该如何编程表示这个过程呢?其实不难,还是按照 [动态规划核心框架](https://labuladong.github.io/article/fname.html?fname=动态规划详解进阶) 中强调多次的套路,首先明确 `dp` 数组的含义,然后只要找到「状态」和「选择」,一切就水到渠成了。
58+
这个 `stoneGame` 函数怎么写呢?博弈问题的难点在于,两个人要轮流进行选择,而且都贼精明,应该如何编程表示这个过程呢?其实不难,还是按照 [动态规划核心框架](https://labuladong.online/algo/fname.html?fname=动态规划详解进阶) 中强调多次的套路,首先明确 `dp` 数组的含义,然后只要找到「状态」和「选择」,一切就水到渠成了。
5959

6060
### 一、定义 `dp` 数组的含义
6161

@@ -153,7 +153,7 @@ dp[i][j].sec = 0
153153

154154
![](https://labuladong.github.io/pictures/博弈问题/3.png)
155155

156-
根据前文 [动态规划答疑篇](https://labuladong.github.io/article/fname.html?fname=最优子结构) 判断 `dp` 数组遍历方向的原则,算法应该倒着遍历 `dp` 数组:
156+
根据前文 [动态规划答疑篇](https://labuladong.online/algo/fname.html?fname=最优子结构) 判断 `dp` 数组遍历方向的原则,算法应该倒着遍历 `dp` 数组:
157157

158158
```java
159159
for (int i = n - 2; i >= 0; i--) {
@@ -238,7 +238,7 @@ int stoneGame(int[] piles) {
238238
<details class="hint-container details">
239239
<summary><strong>引用本文的文章</strong></summary>
240240

241-
- [贪心算法之区间调度问题](https://labuladong.github.io/article/fname.html?fname=贪心算法之区间调度问题)
241+
- [贪心算法之区间调度问题](https://labuladong.online/algo/fname.html?fname=贪心算法之区间调度问题)
242242

243243
</details><hr>
244244

动态规划系列/动态规划之四键键盘.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,8 @@ def dp(n, a_num, copy):
223223
<details class="hint-container details">
224224
<summary><strong>引用本文的文章</strong></summary>
225225

226-
- [一个方法团灭 LeetCode 打家劫舍问题](https://labuladong.github.io/article/fname.html?fname=抢房子)
227-
- [最优子结构原理和 dp 数组遍历方向](https://labuladong.github.io/article/fname.html?fname=最优子结构)
226+
- [一个方法团灭 LeetCode 打家劫舍问题](https://labuladong.online/algo/fname.html?fname=抢房子)
227+
- [最优子结构原理和 dp 数组遍历方向](https://labuladong.online/algo/fname.html?fname=最优子结构)
228228

229229
</details><hr>
230230

动态规划系列/动态规划之正则表达.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@ bool dp(string& s, int i, string& p, int j);
121121
<details class="hint-container details">
122122
<summary><strong>引用本文的文章</strong></summary>
123123
124-
- [最优子结构原理和 dp 数组遍历方向](https://labuladong.github.io/article/fname.html?fname=最优子结构)
125-
- [经典动态规划:编辑距离](https://labuladong.github.io/article/fname.html?fname=编辑距离)
124+
- [最优子结构原理和 dp 数组遍历方向](https://labuladong.online/algo/fname.html?fname=最优子结构)
125+
- [经典动态规划:编辑距离](https://labuladong.online/algo/fname.html?fname=编辑距离)
126126
127127
</details><hr>
128128
@@ -133,7 +133,7 @@ bool dp(string& s, int i, string& p, int j);
133133
<details class="hint-container details">
134134
<summary><strong>引用本文的题目</strong></summary>
135135
136-
<strong>安装 [我的 Chrome 刷题插件](https://labuladong.github.io/article/fname.html?fname=chrome插件简介) 点开下列题目可直接查看解题思路:</strong>
136+
<strong>安装 [我的 Chrome 刷题插件](https://labuladong.online/algo/intro/chrome/) 点开下列题目可直接查看解题思路:</strong>
137137
138138
| LeetCode | 力扣 |
139139
| :----: | :----: |
@@ -146,7 +146,7 @@ bool dp(string& s, int i, string& p, int j);
146146
147147
**_____________**
148148
149-
本文为会员内容,请扫码关注公众号或 [点这里](https://labuladong.gitee.io/article/fname.html?fname=动态规划之正则表达) 查看:
149+
本文为会员内容,请扫码关注公众号或 [点这里](https://labuladong.online/algo/fname.html?fname=动态规划之正则表达) 查看:
150150
151151
![](https://labuladong.github.io/pictures/qrcode.jpg)
152152

动态规划系列/动态规划设计:最长递增子序列.md

+12-12
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
**-----------**
2424

25-
也许有读者看了前文 [动态规划详解](https://labuladong.github.io/article/fname.html?fname=动态规划详解进阶),学会了动态规划的套路:找到了问题的「状态」,明确了 `dp` 数组/函数的含义,定义了 base case;但是不知道如何确定「选择」,也就是找不到状态转移的关系,依然写不出动态规划解法,怎么办?
25+
也许有读者看了前文 [动态规划详解](https://labuladong.online/algo/fname.html?fname=动态规划详解进阶),学会了动态规划的套路:找到了问题的「状态」,明确了 `dp` 数组/函数的含义,定义了 base case;但是不知道如何确定「选择」,也就是找不到状态转移的关系,依然写不出动态规划解法,怎么办?
2626

2727
不要担心,动态规划的难点本来就在于寻找正确的状态转移方程,本文就借助经典的「最长递增子序列问题」来讲一讲设计动态规划的通用技巧:**数学归纳思想**
2828

@@ -55,7 +55,7 @@ int lengthOfLIS(int[] nums);
5555

5656
::: info
5757

58-
为什么这样定义呢?这是解决子序列问题的一个套路,后文 [动态规划之子序列问题解题模板](https://labuladong.github.io/article/fname.html?fname=子序列问题模板) 总结了几种常见套路。你读完本章所有的动态规划问题,就会发现 `dp` 数组的定义方法也就那几种。
58+
为什么这样定义呢?这是解决子序列问题的一个套路,后文 [动态规划之子序列问题解题模板](https://labuladong.online/algo/fname.html?fname=子序列问题模板) 总结了几种常见套路。你读完本章所有的动态规划问题,就会发现 `dp` 数组的定义方法也就那几种。
5959

6060
:::
6161

@@ -192,7 +192,7 @@ int lengthOfLIS(int[] nums) {
192192

193193
::: tip
194194

195-
前文 [二分查找算法详解](https://labuladong.github.io/article/fname.html?fname=二分查找详解) 详细介绍了二分查找的细节及变体,这里就完美应用上了,如果没读过强烈建议阅读。
195+
前文 [二分查找算法详解](https://labuladong.online/algo/fname.html?fname=二分查找详解) 详细介绍了二分查找的细节及变体,这里就完美应用上了,如果没读过强烈建议阅读。
196196

197197
:::
198198

@@ -303,21 +303,21 @@ int lengthOfLIS(int[] nums) {
303303

304304
接下来可阅读:
305305

306-
* [动态规划之最大子数组](https://labuladong.github.io/article/fname.html?fname=最大子数组)
306+
* [动态规划之最大子数组](https://labuladong.online/algo/fname.html?fname=最大子数组)
307307

308308

309309

310310
<hr>
311311
<details class="hint-container details">
312312
<summary><strong>引用本文的文章</strong></summary>
313313

314-
- [二分查找高效判定子序列](https://labuladong.github.io/article/fname.html?fname=二分查找判定子序列)
315-
- [动态规划之子序列问题解题模板](https://labuladong.github.io/article/fname.html?fname=子序列问题模板)
316-
- [动态规划穷举的两种视角](https://labuladong.github.io/article/fname.html?fname=动归两种视角)
317-
- [动态规划解题套路框架](https://labuladong.github.io/article/fname.html?fname=动态规划详解进阶)
318-
- [动态规划设计:最大子数组](https://labuladong.github.io/article/fname.html?fname=最大子数组)
319-
- [我的刷题心得:算法的本质](https://labuladong.github.io/article/fname.html?fname=算法心得)
320-
- [最优子结构原理和 dp 数组遍历方向](https://labuladong.github.io/article/fname.html?fname=最优子结构)
314+
- [二分查找高效判定子序列](https://labuladong.online/algo/fname.html?fname=二分查找判定子序列)
315+
- [动态规划之子序列问题解题模板](https://labuladong.online/algo/fname.html?fname=子序列问题模板)
316+
- [动态规划穷举的两种视角](https://labuladong.online/algo/fname.html?fname=动归两种视角)
317+
- [动态规划解题套路框架](https://labuladong.online/algo/fname.html?fname=动态规划详解进阶)
318+
- [动态规划设计:最大子数组](https://labuladong.online/algo/fname.html?fname=最大子数组)
319+
- [我的刷题心得:算法的本质](https://labuladong.online/algo/fname.html?fname=算法心得)
320+
- [最优子结构原理和 dp 数组遍历方向](https://labuladong.online/algo/fname.html?fname=最优子结构)
321321

322322
</details><hr>
323323

@@ -328,7 +328,7 @@ int lengthOfLIS(int[] nums) {
328328
<details class="hint-container details">
329329
<summary><strong>引用本文的题目</strong></summary>
330330

331-
<strong>安装 [我的 Chrome 刷题插件](https://labuladong.github.io/article/fname.html?fname=chrome插件简介) 点开下列题目可直接查看解题思路:</strong>
331+
<strong>安装 [我的 Chrome 刷题插件](https://labuladong.online/algo/intro/chrome/) 点开下列题目可直接查看解题思路:</strong>
332332

333333
| LeetCode | 力扣 |
334334
| :----: | :----: |

0 commit comments

Comments
 (0)