Skip to content

Commit 00c2a65

Browse files
author
lucifer
committed
fix: 电子书问题修复
1 parent 5d1d27a commit 00c2a65

18 files changed

+156
-65
lines changed

Diff for: .gitignore

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
_book/
33
.idea/*
44
node_modules/
5-
book.pdf
6-
book.mobi
7-
book.epub
8-
book.zip
5+
book*.pdf
6+
book*.mobi
7+
book*.epub
8+
book*.zip

Diff for: SUMMARY.md

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
* [第一章 - 算法专题](thinkings/README.md)
77
* [数据结构](thinkings/basic-data-structure.md)
8-
* [基础算法](thinkings/basic-algorithm.md)
98
* [二叉树的遍历](thinkings/binary-tree-traversal.md)
109
* [动态规划](thinkings/dynamic-programming.md)
1110
* [哈夫曼编码和游程编码](thinkings/run-length-encode-and-huffman-encode.md)

Diff for: problems/4.median-of-two-sorted-arrays.md

+5-6
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ Java Code:
119119

120120
_解法一 - 暴力解法(Brute force)_
121121

122-
```java []
122+
```java
123123
class MedianTwoSortedArrayBruteForce {
124124
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
125125
int[] newArr = mergeTwoSortedArray(nums1, nums2);
@@ -157,7 +157,7 @@ class MedianTwoSortedArrayBruteForce {
157157
}
158158
```
159159

160-
```javascript []
160+
```javascript
161161
/**
162162
* @param {number[]} nums1
163163
* @param {number[]} nums2
@@ -196,7 +196,7 @@ var findMedianSortedArrays = function (nums1, nums2) {
196196

197197
_解法二 - 二分查找(Binary Search)_
198198

199-
```js []
199+
```js
200200
/**
201201
* 二分解法
202202
* @param {number[]} nums1
@@ -234,7 +234,7 @@ var findMedianSortedArrays = function (nums1, nums2) {
234234
};
235235
```
236236

237-
```java []
237+
```java
238238
class MedianSortedTwoArrayBinarySearch {
239239
public static double findMedianSortedArraysBinarySearch(int[] nums1, int[] nums2) {
240240
// do binary search for shorter length array, make sure time complexity log(min(m,n)).
@@ -285,6 +285,5 @@ class MedianSortedTwoArrayBinarySearch {
285285

286286
大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。
287287
大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
288-
![](https://tva1.sinaimg.cn/large/007S8ZIlly1gfcuzagjalj30p00dwabs.jpg)
289288

290-
![](https://tva1.sinaimg.cn/large/007S8ZIlly1ghltzedtodj31bi0hcq5s.jpg)
289+
![](https://tva1.sinaimg.cn/large/007S8ZIlly1gfcuzagjalj30p00dwabs.jpg)

Diff for: problems/40.combination-sum-ii.md

+4
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,7 @@ class Solution:
142142
- [90.subsets-ii](./90.subsets-ii.md)
143143
- [113.path-sum-ii](./113.path-sum-ii.md)
144144
- [131.palindrome-partitioning](./131.palindrome-partitioning.md)
145+
146+
大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。
147+
大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
148+
![](https://tva1.sinaimg.cn/large/007S8ZIlly1gfcuzagjalj30p00dwabs.jpg)

Diff for: problems/52.N-Queens-II.md

+4
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,7 @@ const totalNQueens = function (n) {
9696

9797
- 时间复杂度:O(N!)
9898
- 空间复杂度:O(N)
99+
100+
大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。
101+
大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
102+
![](https://tva1.sinaimg.cn/large/007S8ZIlly1gfcuzagjalj30p00dwabs.jpg)

Diff for: problems/53.maximum-sum-subarray-cn.md

-4
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,6 @@ https://leetcode-cn.com/problems/maximum-subarray/
3333
- linkedin
3434
- microsoft
3535

36-
## 公司
37-
38-
- 阿里、百度、字节、腾讯
39-
4036
## 思路
4137

4238
这道题求解连续最大子序列和,以下从时间复杂度角度分析不同的解题思路。

Diff for: problems/56.merge-intervals.md

+4
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,7 @@ class Solution:
120120

121121
- 时间复杂度:由于采用了排序,因此复杂度大概为 $O(NlogN)$
122122
- 空间复杂度:$O(N)$
123+
124+
大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。
125+
大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
126+
![](https://tva1.sinaimg.cn/large/007S8ZIlly1gfcuzagjalj30p00dwabs.jpg)

Diff for: problems/63.unique-paths-ii.md

+4
Original file line numberDiff line numberDiff line change
@@ -161,3 +161,7 @@ class Solution:
161161

162162
- [70. 爬楼梯](https://leetcode-cn.com/problems/climbing-stairs/)
163163
- [62. 不同路径](./62.unique-paths.md)
164+
165+
大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。
166+
大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
167+
![](https://tva1.sinaimg.cn/large/007S8ZIlly1gfcuzagjalj30p00dwabs.jpg)

Diff for: problems/78.subsets.md

+4-35
Original file line numberDiff line numberDiff line change
@@ -66,41 +66,6 @@ https://leetcode-cn.com/problems/subsets/
6666
JavaScript Code:
6767

6868
```js
69-
/*
70-
* @lc app=leetcode id=78 lang=javascript
71-
*
72-
* [78] Subsets
73-
*
74-
* https://leetcode.com/problems/subsets/description/
75-
*
76-
* algorithms
77-
* Medium (51.19%)
78-
* Total Accepted: 351.6K
79-
* Total Submissions: 674.8K
80-
* Testcase Example: '[1,2,3]'
81-
*
82-
* Given a set of distinct integers, nums, return all possible subsets (the
83-
* power set).
84-
*
85-
* Note: The solution set must not contain duplicate subsets.
86-
*
87-
* Example:
88-
*
89-
*
90-
* Input: nums = [1,2,3]
91-
* Output:
92-
* [
93-
* ⁠ [3],
94-
* [1],
95-
* [2],
96-
* [1,2,3],
97-
* [1,3],
98-
* [2,3],
99-
* [1,2],
100-
* []
101-
* ]
102-
*
103-
*/
10469
function backtrack(list, tempList, nums, start) {
10570
list.push([...tempList]);
10671
for (let i = start; i < nums.length; i++) {
@@ -152,3 +117,7 @@ public:
152117
- [90.subsets-ii](./90.subsets-ii.md)
153118
- [113.path-sum-ii](./113.path-sum-ii.md)
154119
- [131.palindrome-partitioning](./131.palindrome-partitioning.md)
120+
121+
大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。
122+
大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
123+
![](https://tva1.sinaimg.cn/large/007S8ZIlly1gfcuzagjalj30p00dwabs.jpg)

Diff for: problems/79.word-search.md

+4
Original file line numberDiff line numberDiff line change
@@ -279,3 +279,7 @@ var exist = function (board, word) {
279279
## 参考(References)
280280

281281
1. [回溯法 Wiki](https://www.wikiwand.com/zh/%E5%9B%9E%E6%BA%AF%E6%B3%95)
282+
283+
大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。
284+
大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
285+
![](https://tva1.sinaimg.cn/large/007S8ZIlly1gfcuzagjalj30p00dwabs.jpg)

Diff for: problems/84.largest-rectangle-in-histogram.md

+9-9
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,19 @@ https://leetcode-cn.com/problems/largest-rectangle-in-histogram/
2525
2626
```
2727

28-
## 前置知识
29-
30-
- 单调栈
31-
32-
## 暴力枚举 - 左右端点法(TLE)
33-
3428
## 公司
3529

3630
- 阿里
3731
- 腾讯
3832
- 百度
3933
- 字节
4034

35+
## 前置知识
36+
37+
- 单调栈
38+
39+
## 暴力枚举 - 左右端点法(TLE)
40+
4141
### 思路
4242

4343
我们暴力尝试`所有可能的矩形`。由于矩阵是二维图形, 我我们可以使用`左右两个端点来唯一确认一个矩阵`。因此我们使用双层循环枚举所有的可能性即可。 而矩形的面积等于`(右端点坐标 - 左端点坐标 + 1) * 最小的高度`,最小的高度我们可以在遍历的时候顺便求出。
@@ -192,6 +192,6 @@ class Solution:
192192

193193
- [42.trapping-rain-water](https://github.com/azl397985856/leetcode/blob/master/problems/42.trapping-rain-water.md)
194194

195-
欢迎关注我的公众号《脑洞前端》获取更多更新鲜的 LeetCode 题解
196-
197-
![](https://tva1.sinaimg.cn/large/007S8ZIlly1ghltxazed9j31bi0hcq5s.jpg)
195+
大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。
196+
大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
197+
![](https://tva1.sinaimg.cn/large/007S8ZIlly1gfcuzagjalj30p00dwabs.jpg)

Diff for: thinkings/DFS.md

+35-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# 深度优先遍历
22

3+
## 介绍
4+
35
深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点 v 的所在边都己被探寻过,搜索将回溯到发现节点 v 的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。
46

57
深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。
@@ -10,7 +12,39 @@
1012

1113
另外深度优先遍历可以结合回溯专题来联系,建议将这两个专题放到一起来学习。
1214

13-
## 题目
15+
DFS 的概念来自于图论,但是搜索中 DFS 和图论中 DFS 还是有一些区别,搜索中 DFS 一般指的是通过递归函数实现暴力枚举。
16+
17+
## 算法流程
18+
19+
1. 首先将根节点放入**stack**中。
20+
2.*stack*中取出第一个节点,并检验它是否为目标。如果找到目标,则结束搜寻并回传结果。否则将它某一个尚未检验过的直接子节点加入**stack**中。
21+
3. 重复步骤 2。
22+
4. 如果不存在未检测过的直接子节点。将上一级节点加入**stack**中。
23+
重复步骤 2。
24+
5. 重复步骤 4。
25+
6.**stack**为空,表示整张图都检查过了——亦即图中没有欲搜寻的目标。结束搜寻并回传“找不到目标”。
26+
27+
> 这里的 stack 可以理解为自实现的栈,也可以理解为调用栈
28+
29+
## 算法模板
30+
31+
```js
32+
const visited = {}
33+
function dfs(i) {
34+
if (满足特定条件){
35+
// 返回结果 or 退出搜索空间
36+
}
37+
38+
visited[i] = true // 将当前状态标为已搜索
39+
for (根据i能到达的下个状态j) {
40+
if (!visited[j]) { // 如果状态j没有被搜索过
41+
dfs(j)
42+
}
43+
}
44+
}
45+
```
46+
47+
## 题目推荐
1448
1549
这是我近期总结的几个 DFS 题目,后续会持续更新~
1650

Diff for: thinkings/greedy.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
贪婪策略是一种常见的算法思想,具体是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关,这点和动态规划一样。贪婪策略和动态规划类似,大多数情况也都是用来处理`极值问题`
44

5-
LeetCode 上对于贪婪策略有 73 道题目。我们将其分成几个类型来讲解,截止目前我们暂时只提供`覆盖`问题,其他的可以期待我的新书或者之后的题解文章
5+
LeetCode 上对于贪婪策略有 73 道题目。我们将其分成几个类型来讲解,截止目前我们暂时只提供`覆盖`问题,其他类型可以期待我的新书或者之后的题解文章
66

7-
## 覆盖
7+
## 覆盖问题
88

99
我们挑选三道来讲解,这三道题除了使用贪婪法,你也可以尝试动态规划来解决。
1010

Diff for: thinkings/island.md

+61-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,67 @@
1-
# 小岛
1+
# 小岛问题
22

33
LeetCode 上有很多小岛题,虽然官方没有这个标签, 但是在我这里都差不多。不管是思路还是套路都比较类似,大家可以结合起来练习。
44

5+
## 套路
6+
7+
这种题目的套路都是 DFS,从一个或多个入口 DFS即可。 DFS 的时候,我们往四个方向延伸即可。
8+
9+
```py
10+
seen = set()
11+
def dfs(i, j):
12+
if i 越界 or j 越界: return
13+
if (i, j) in seen: return
14+
temp = board[i][j]
15+
# 标记为访问过
16+
seen.add((i, j))
17+
#
18+
dfs(i + 1, j)
19+
#
20+
dfs(i - 1, j)
21+
#
22+
dfs(i, j + 1)
23+
#
24+
dfs(i, j - 1)
25+
# 撤销标记
26+
seen.remove((i, j))
27+
# 单点搜索
28+
dfs(0, 0)
29+
# 多点搜索
30+
for i in range(M):
31+
for j in range(N):
32+
dfs(i, j)
33+
```
34+
35+
36+
有时候我们甚至可以不用 visited 来标记每个 cell 的访问情况, 而是直接原地标记,这种算法的空间复杂度会更好。
37+
38+
```py
39+
def dfs(i, j):
40+
if i 越界 or j 越界: return
41+
if board[i][j] == -1: return
42+
temp = board[i][j]
43+
# 标记为访问过
44+
board[i][j] = -1
45+
#
46+
dfs(i + 1, j)
47+
#
48+
dfs(i - 1, j)
49+
#
50+
dfs(i, j + 1)
51+
#
52+
dfs(i, j - 1)
53+
# 撤销标记
54+
board[i][j] = temp
55+
# 单点搜索
56+
dfs(0, 0)
57+
# 多点搜索
58+
for i in range(M):
59+
for j in range(N):
60+
dfs(i, j)
61+
```
62+
63+
## 相关题目
64+
565
- [200. 岛屿数量](https://github.com/azl397985856/leetcode/blob/master/problems/200.number-of-islands.md)
666
- [695. 岛屿的最大面积](https://leetcode-cn.com/problems/max-area-of-island/solution/695-dao-yu-de-zui-da-mian-ji-dfspython3-by-fe-luci/)
767
- [1162. 地图分析](https://leetcode-cn.com/problems/as-far-from-land-as-possible/solution/python-tu-jie-chao-jian-dan-de-bfs1162-di-tu-fen-x/)

Diff for: thinkings/prefix.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# 前缀和专题
2+
13
我花了几天时间,从力扣中精选了五道相同思想的题目,来帮助大家解套,如果觉得文章对你有用,记得点赞分享,让我看到你的认可,有动力继续做下去。
24

35
- [467. 环绕字符串中唯一的子字符串](https://leetcode-cn.com/problems/unique-substrings-in-wraparound-string/ "467. 环绕字符串中唯一的子字符串")(中等)

Diff for: thinkings/string-problems.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## 字符串问题
1+
# 字符串问题
22

33
字符串问题有很多,从简单的实现substr,识别回文,到复杂一点的公共子串/子序列。其实字符串本质上也是字符数组,因此
44
很多数据的思想和方法也可以用在字符串问题上,并且在有些时候能够发挥很好的作用。

Diff for: thinkings/trie.md

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
## 前缀树问题
1+
# 前缀树问题
2+
3+
## 介绍
24

35
截止目前(2020-02-04) [前缀树(字典树)](https://leetcode-cn.com/tag/trie/) 在 LeetCode 一共有 17 道题目。其中 2 道简单,8 个中等,7 个困难。
46

57
这里总结了四道题,弄懂这几道, 那么前缀树对你应该不是大问题, 希望这个专题可以帮到正在学习前缀树 的你。
68

9+
## API
10+
711
前缀树的 api 主要有以下几个:
812

913
- `insert(word)`: 插入一个单词
@@ -12,6 +16,8 @@
1216

1317
其中 startWith 是前缀树最核心的用法,其名称前缀树就从这里而来。大家可以先拿 208 题开始,熟悉一下前缀树,然后再尝试别的题目。
1418

19+
## 图解
20+
1521
一个前缀树大概是这个样子:
1622

1723
![](https://tva1.sinaimg.cn/large/007S8ZIlly1ghlug87vyfj30mz0gq406.jpg)

Diff for: thinkings/union-find.md

+6
Original file line numberDiff line numberDiff line change
@@ -147,3 +147,9 @@ class UF:
147147
def connected(self, p, q):
148148
return self.find(p) == self.find(q)
149149
```
150+
151+
## 总结
152+
153+
如果题目有连通,等价的关系,那么你就可以考虑并查集,使用并查集的时候要注意路径压缩。
154+
155+
本文提供的目模板是西法我用的比较多的,用了它不仅出错概率大大降低,而且速度也快了很多,整个人都更自信了呢 ^_^

0 commit comments

Comments
 (0)