Skip to content

Commit b4a38fb

Browse files
committed
大更新:开头添加对应的力扣题目
1 parent 74a3d06 commit b4a38fb

File tree

78 files changed

+2431
-2283
lines changed

Some content is hidden

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

78 files changed

+2431
-2283
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ English version repo and Gitbook is on [english branch](https://github.com/labul
3737

3838
Gitbook 地址:https://labuladong.gitbook.io/algo/
3939

40-
2、建议关注我的公众号 **labuladong**,坚持高质量原创,说是最良心最硬核的技术公众号都不为过。本仓库的文章就是从公众号里整理出来的**一部分**内容,公众号后台回复关键词【电子书】可以获得这份小抄的完整版本;回复【加群】可以加入我们的刷题群,和大家一起讨论算法问题,分享内推机会:
40+
3、建议关注我的公众号 **labuladong**,坚持高质量原创,说是最良心最硬核的技术公众号都不为过。本仓库的文章就是从公众号里整理出来的**一部分**内容,公众号后台回复关键词【电子书】可以获得这份小抄的完整版本;回复【加群】可以加入我们的刷题群,和大家一起讨论算法问题,分享内推机会:
4141

4242
<p align='center'>
4343
<img src="https://gitee.com/labuladong/pictures/raw/master/qrcode.jpg" width = "200" />

pictures/LRU算法/put.jpg

38.4 KB
Loading

pictures/souyisou.png

20.1 KB
Loading

pictures/table_qr2.jpg

187 KB
Loading

pictures/正则/1.jpeg

114 KB
Loading

pictures/正则/2.jpeg

115 KB
Loading

pictures/正则/3.jpeg

115 KB
Loading

pictures/正则/4.jpeg

111 KB
Loading

动态规划系列/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88

99
这就是思维模式的框架,**本章都会按照以上的模式来解决问题,辅助读者养成这种模式思维**,有了方向遇到问题就不会抓瞎,足以解决一般的动态规划问题。
1010

11-
欢迎关注我的公众号 labuladong,方便获得最新的优质文章
11+
欢迎关注我的公众号 labuladong,查看全部文章
1212

1313
![labuladong二维码](../pictures/qrcode.jpg)

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

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,25 @@
11
# 动态规划之KMP字符匹配算法
22

3+
4+
<p align='center'>
5+
<a href="https://github.com/labuladong/fucking-algorithm" target="view_window"><img alt="GitHub" src="https://img.shields.io/github/stars/labuladong/fucking-algorithm?label=Stars&style=flat-square&logo=GitHub"></a>
6+
<a href="https://www.zhihu.com/people/labuladong"><img src="https://img.shields.io/badge/%E7%9F%A5%E4%B9%8E-@labuladong-000000.svg?style=flat-square&logo=Zhihu"></a>
7+
<a href="https://i.loli.net/2020/10/10/MhRTyUKfXZOlQYN.jpg"><img src="https://img.shields.io/badge/公众号-@labuladong-000000.svg?style=flat-square&logo=WeChat"></a>
8+
<a href="https://space.bilibili.com/14089380"><img src="https://img.shields.io/badge/B站-@labuladong-000000.svg?style=flat-square&logo=Bilibili"></a>
9+
</p>
10+
11+
![](../pictures/souyisou.png)
12+
13+
相关推荐:
14+
* [经典动态规划:最长公共子序列](https://labuladong.gitbook.io/algo)
15+
* [特殊数据结构:单调栈](https://labuladong.gitbook.io/algo)
16+
17+
读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目:
18+
19+
[28.实现 strStr()](https://leetcode-cn.com/problems/implement-strstr)
20+
21+
**-----------**
22+
323
KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实有点复杂。
424

525
很多读者抱怨 KMP 算法无法理解,这很正常,想到大学教材上关于 KMP 算法的讲解,也不知道有多少未来的 Knuth、Morris、Pratt 被提前劝退了。有一些优秀的同学通过手推 KMP 算法的过程来辅助理解该算法,这是一种办法,不过本文要从逻辑层面帮助读者理解算法的原理。十行代码之间,KMP 灰飞烟灭。
@@ -37,7 +57,7 @@ int search(String pat, String txt) {
3757
}
3858
```
3959

40-
对于暴力算法,如果出现不匹配字符,同时回退 `txt``pat` 的指针,嵌套 for 循环,时间复杂度 $O(MN)$,空间复杂度$O(1)$。最主要的问题是,如果字符串中重复的字符比较多,该算法就显得很蠢。
60+
对于暴力算法,如果出现不匹配字符,同时回退 `txt``pat` 的指针,嵌套 for 循环,时间复杂度 `O(MN)`,空间复杂度`O(1)`。最主要的问题是,如果字符串中重复的字符比较多,该算法就显得很蠢。
4161

4262
比如 txt = "aaacaaab" pat = "aaab":
4363

@@ -399,12 +419,14 @@ public class KMP {
399419

400420
KMP 算法也就是动态规划那点事,我们的公众号文章目录有一系列专门讲动态规划的,而且都是按照一套框架来的,无非就是描述问题逻辑,明确 `dp` 数组含义,定义 base case 这点破事。希望这篇文章能让大家对动态规划有更深的理解。
401421

402-
**致力于把算法讲清楚!欢迎关注我的微信公众号 labuladong,查看更多通俗易懂的文章**
403422

404-
![labuladong](../pictures/labuladong.png)
405423

406-
[上一篇:贪心算法之区间调度问题](../动态规划系列/贪心算法之区间调度问题.md)
424+
**_____________**
425+
426+
**刷算法,学套路,认准 labuladong,公众号和 [在线电子书](https://labuladong.gitbook.io/algo) 持续更新最新文章**
407427

408-
[下一篇:团灭 LeetCode 股票买卖问题](../动态规划系列/团灭股票问题.md)
428+
**本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**
409429

410-
[目录](../README.md#目录)
430+
<p align='center'>
431+
<img src="../pictures/table_qr2.jpg" width=500 >
432+
</p>

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

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,26 @@
11
# 动态规划之博弈问题
22

3-
上一篇文章 [几道智力题](../高频面试系列/一行代码解决的智力题.md) 中讨论到一个有趣的「石头游戏」,通过题目的限制条件,这个游戏是先手必胜的。但是智力题终究是智力题,真正的算法问题肯定不会是投机取巧能搞定的。所以,本文就借石头游戏来讲讲「假设两个人都足够聪明,最后谁会获胜」这一类问题该如何用动态规划算法解决。
3+
4+
<p align='center'>
5+
<a href="https://github.com/labuladong/fucking-algorithm" target="view_window"><img alt="GitHub" src="https://img.shields.io/github/stars/labuladong/fucking-algorithm?label=Stars&style=flat-square&logo=GitHub"></a>
6+
<a href="https://www.zhihu.com/people/labuladong"><img src="https://img.shields.io/badge/%E7%9F%A5%E4%B9%8E-@labuladong-000000.svg?style=flat-square&logo=Zhihu"></a>
7+
<a href="https://i.loli.net/2020/10/10/MhRTyUKfXZOlQYN.jpg"><img src="https://img.shields.io/badge/公众号-@labuladong-000000.svg?style=flat-square&logo=WeChat"></a>
8+
<a href="https://space.bilibili.com/14089380"><img src="https://img.shields.io/badge/B站-@labuladong-000000.svg?style=flat-square&logo=Bilibili"></a>
9+
</p>
10+
11+
![](../pictures/souyisou.png)
12+
13+
相关推荐:
14+
* [40张图解:TCP三次握手和四次挥手面试题](https://labuladong.gitbook.io/algo)
15+
* [如何计算完全二叉树的节点数](https://labuladong.gitbook.io/algo)
16+
17+
读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目:
18+
19+
[877.石子游戏](https://leetcode-cn.com/problems/stone-game)
20+
21+
**-----------**
22+
23+
上一篇文章 [几道智力题](https://labuladong.gitbook.io/algo) 中讨论到一个有趣的「石头游戏」,通过题目的限制条件,这个游戏是先手必胜的。但是智力题终究是智力题,真正的算法问题肯定不会是投机取巧能搞定的。所以,本文就借石头游戏来讲讲「假设两个人都足够聪明,最后谁会获胜」这一类问题该如何用动态规划算法解决。
424

525
博弈类问题的套路都差不多,下文举例讲解,其核心思路是在二维 dp 的基础上使用元组分别存储两个人的博弈结果。掌握了这个技巧以后,别人再问你什么俩海盗分宝石,俩人拿硬币的问题,你就告诉别人:我懒得想,直接给你写个算法算一下得了。
626

@@ -43,7 +63,7 @@ dp[0][1].fir = 9 意味着:面对石头堆 [3, 9],先手最终能够获得 9
4363
dp[1][3].sec = 2 意味着:面对石头堆 [9, 1, 2],后手最终能够获得 2 分。
4464
```
4565

46-
我们想求的答案是先手和后手最终分数之差,按照这个定义也就是 $dp[0][n-1].fir - dp[0][n-1].sec$,即面对整个 piles,先手的最优得分和后手的最优得分之差。
66+
我们想求的答案是先手和后手最终分数之差,按照这个定义也就是 `dp[0][n-1].fir - dp[0][n-1].sec`,即面对整个 piles,先手的最优得分和后手的最优得分之差。
4767

4868
### 二、状态转移方程
4969

@@ -183,41 +203,14 @@ int stoneGame(int[] piles) {
183203

184204
希望本文对你有帮助。
185205

186-
**致力于把算法讲清楚!欢迎关注我的微信公众号 labuladong,查看更多通俗易懂的文章**
187-
188-
![labuladong](../pictures/labuladong.png)
189206

190-
[Hanmin](https://github.com/Miraclemin/) 提供 Python3 代码:
191207

192-
```python
193-
def stoneGame(self, piles:List[int]) -> int:
194-
n = len(piles)
195-
##初始化dp数组,用三维数组表示
196-
dp = [[[0,0] for _ in range(0,n)] for _ in range(n)]
197-
##填入base case
198-
for i in range(0,n):
199-
dp[i][i][0] = piles[i]
200-
dp[i][i][1] = 0
201-
##斜着遍历数组
202-
for l in range(2,n+1):
203-
for i in range(0,n-l+1):
204-
j = l + i - 1
205-
##先手选择最左边或者最右边的分数
206-
left = piles[i] + dp[i+1][j][1]
207-
right = piles[j] + dp[i][j-1][1]
208-
##套用状态转移方程
209-
if left > right:
210-
dp[i][j][0] = left
211-
dp[i][j][1] = dp[i+1][j][0]
212-
else:
213-
dp[i][j][0] = right
214-
dp[i][j][1] = dp[i][j-1][0]
215-
res = dp[0][n-1]
216-
return res[0] - res[1]
217-
```
208+
**_____________**
218209

219-
[上一篇:动态规划之子序列问题解题模板](../动态规划系列/子序列问题模板.md)
210+
**刷算法,学套路,认准 labuladong,公众号和 [在线电子书](https://labuladong.gitbook.io/algo) 持续更新最新文章**
220211

221-
[下一篇:贪心算法之区间调度问题](../动态规划系列/贪心算法之区间调度问题.md)
212+
**本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**
222213

223-
[目录](../README.md#目录)
214+
<p align='center'>
215+
<img src="../pictures/table_qr2.jpg" width=500 >
216+
</p>

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

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,27 @@
11
# 动态规划之四键键盘
22

3+
4+
<p align='center'>
5+
<a href="https://github.com/labuladong/fucking-algorithm" target="view_window"><img alt="GitHub" src="https://img.shields.io/github/stars/labuladong/fucking-algorithm?label=Stars&style=flat-square&logo=GitHub"></a>
6+
<a href="https://www.zhihu.com/people/labuladong"><img src="https://img.shields.io/badge/%E7%9F%A5%E4%B9%8E-@labuladong-000000.svg?style=flat-square&logo=Zhihu"></a>
7+
<a href="https://i.loli.net/2020/10/10/MhRTyUKfXZOlQYN.jpg"><img src="https://img.shields.io/badge/公众号-@labuladong-000000.svg?style=flat-square&logo=WeChat"></a>
8+
<a href="https://space.bilibili.com/14089380"><img src="https://img.shields.io/badge/B站-@labuladong-000000.svg?style=flat-square&logo=Bilibili"></a>
9+
</p>
10+
11+
![](../pictures/souyisou.png)
12+
13+
相关推荐:
14+
* [如何高效寻找素数](https://labuladong.gitbook.io/algo)
15+
* [动态规划解题套路框架](https://labuladong.gitbook.io/algo)
16+
17+
读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目:
18+
19+
[651.四键键盘](https://leetcode-cn.com/problems/4-keys-keyboard)
20+
21+
**-----------**
22+
23+
PS:现在这到题好想变成会员题目了?我当时做的时候还是免费的。
24+
325
四键键盘问题很有意思,而且可以明显感受到:对 dp 数组的不同定义需要完全不同的逻辑,从而产生完全不同的解法。
426

527
首先看一下题目:
@@ -168,13 +190,12 @@ def dp(n, a_num, copy):
168190

169191
根据这个事实,我们重新定义了状态,重新寻找了状态转移,从逻辑上减少了无效的子问题个数,从而提高了算法的效率。
170192

171-
坚持原创高质量文章,致力于把算法问题讲清楚,欢迎关注我的公众号 labuladong 获取最新文章:
172-
173-
![labuladong](../pictures/labuladong.jpg)
174-
193+
**_____________**
175194

176-
[上一篇:团灭 LeetCode 打家劫舍问题](../动态规划系列/抢房子.md)
195+
**刷算法,学套路,认准 labuladong,公众号和 [在线电子书](https://labuladong.gitbook.io/algo) 持续更新最新文章**
177196

178-
[下一篇:动态规划之正则表达](../动态规划系列/动态规划之正则表达.md)
197+
**本小抄即将出版,微信扫码关注公众号,后台回复「小抄」限时免费获取,回复「进群」可进刷题群一起刷题,带你搞定 LeetCode**
179198

180-
[目录](../README.md#目录)
199+
<p align='center'>
200+
<img src="../pictures/table_qr2.jpg" width=500 >
201+
</p>

0 commit comments

Comments
 (0)