Skip to content

Commit

Permalink
feat: 电子书
Browse files Browse the repository at this point in the history
  • Loading branch information
lucifer committed Oct 17, 2020
1 parent 3a0b5d1 commit bff75b1
Show file tree
Hide file tree
Showing 147 changed files with 1,100 additions and 1,120 deletions.
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
.DS_Store
_book/
.idea/*
node_modules/
node_modules/
book.pdf
book.mobi
book.epub
book.zip
33 changes: 28 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,36 @@

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

## 项目预览
## 电子书

![project-overview](https://github.com/azl397985856/leetcode/blob/master/Kapture%202020-08-19%20at%2011.37.36.gif)
这是我将我的所有公开的算法资料整理的一个电子书,全部题目信息中文化,以前会有一些英文描述。

可以清晰地看出仓库组织关系。
![](https://cdn.jsdelivr.net/gh/azl397985856/cdn/2020-10-17/1602928846461-image.png)

(你可以下载本仓库 和 obsidian 软件,然后用 obsidian 打开获得更好的阅读效果)

![](https://cdn.jsdelivr.net/gh/azl397985856/cdn/2020-10-17/1602928862442-image.png)

我写这本电子书花费了大量的时间和精力,除了内容上的创作,还要做一些电子书的排版,以让大家获得更好的阅读体验。光数学公式的展示,我就研究了多个插件的要源码,并魔改了一下才使得导出的电子书支持 latex。 不过有些动图,在做成电子书的时候自然就变没了,如果需要看动图的, 可以去我的公众号《力扣加加》或者我的 leetcode 题解仓库看。

由于是电子书,因此阅读体验可能比 Github 更好, 但是相应地就不能获得及时的更新,因此你可以收藏一下我的同步电子书的网站 [西法的刷题秘籍 - 在线版](https://leetcode-solution-leetcode-pp.gitbook.io/leetcode-solution/)。后期可能将每日一题, 91 天学算法其他章节的讲义等也整理进来。

电子书有更新我也会在公众号《力扣加加》进行通知, 感兴趣的同学可以关注一下。

目前导出了四种格式,可惜的是这几种格式都有自己的不足:

- 在线版。 实时更新,想要及时获取最新信息的可以用在线版。
- html。 方便大家在线观看,由于是 html ,实际上大家也可以保存起来**离线**观看。
- pdf。可使用 pdf 阅读器和浏览器(比如谷歌)直接观看,阅读体验一般。
- mobi。 下载一个 Kindle 客户端就可以看,不需要购买 Kindle。
- epub。 数学公式和主题都比较不错, 但是代码没有高亮。

大家选择适合自己的格式下载即可。

- [在线版](https://leetcode-solution-leetcode-pp.gitbook.io/leetcode-solution/)
- [html](./assets/book.zip)
- [pdf](./book.pdf)
- [mobi](./book.mobi)
- [epub](./book.epub)

## 介绍

Expand Down Expand Up @@ -167,7 +190,7 @@ leetcode 题解,记录自己的 leetcode 解题之路。
- [《构造二叉树》专题](./selected/construct-binary-tree.md)
- [字典序列删除](./selected/a-deleted.md)
- [百度的算法面试题 - 祖玛游戏](./selected/zuma-game.md)
- [西法带你学算法】一次搞定前缀和](./selected/atMostK.md)
- [西法的刷题秘籍】一次搞定前缀和](./selected/atMostK.md)
- [字节跳动的算法面试题是什么难度?](./selected/byte-dance-algo-ex.md)
- [字节跳动的算法面试题是什么难度?(第二弹)](./selected/byte-dance-algo-ex-2017.md)
- [《我是你的妈妈呀》 - 第一期](./selected/mother-01.md)
Expand Down
427 changes: 213 additions & 214 deletions SUMMARY.md

Large diffs are not rendered by default.

Binary file removed book.epub
Binary file not shown.
9 changes: 7 additions & 2 deletions book.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@
"structure": {
"readme": "introduction.md"
},
"language": "zh-hans"

"language": "zh-hans",
"plugins": ["katex", "ace", "theme-api"],
"pluginsConfig": {
"theme-api": {
"theme": "dark"
}
}
}
Binary file removed book.mobi
Binary file not shown.
Binary file removed book.pdf
Binary file not shown.
6 changes: 6 additions & 0 deletions collections/easy.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
# 简单难度题目合集

这里的题目难度比较小, 大多是模拟题,或者是很容易看出解法的题目,另外简单题目一般使用暴力法都是可以解决的。 这个时候只有看一下数据范围,思考下你的算法复杂度就行了。

当然也不排除很多 hard 题目也可以暴力模拟,大家平时多注意数据范围即可。

- [面试题 17.12. BiNode](../problems/binode-lcci.md) 🆕

- [0001.two-sum](https://github.com/azl397985856/leetcode/blob/master/problems/1.two-sum.md)
Expand Down
24 changes: 24 additions & 0 deletions collections/hard.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,27 @@
# 困难难度题目合集

困难难度题目从类型上说多是:

-
- 设计题
- 游戏场景题目
- 中等题目的 follow up

从解法上来说,多是:

- 图算法
- 动态规划
- 二分法
- DFS & BFS
- 状态压缩
- 剪枝

从逻辑上说, 要么就是非常难想到,要么就是非常难写代码。 这里我总结了几个技巧:

1. 看题目的数据范围, 看能否暴力模拟
2. 暴力枚举所有可能的算法往上套
3. 总结和记忆解题模板,减少解题压力

- [0004.median-of-two-sorted-array](../problems/4.median-of-two-sorted-arrays.md)
- [0023.merge-k-sorted-lists](../problems/23.merge-k-sorted-lists.md)
- [0025.reverse-nodes-in-k-group](../problems/25.reverse-nodes-in-k-groups-cn.md)
Expand Down
8 changes: 7 additions & 1 deletion collections/medium.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
# 中等难度题目合集

中等题目是力扣比例最大的部分,因此这部分我的题解也是最多的。 大家不要太过追求难题,先把中等难度题目做熟了再说。

这部分的题目要不需要我们挖掘题目的内含信息, 将其抽象成简单题目。 要么是一些写起来比较麻烦的题目, 一些人编码能力不行就挂了。因此大家一定要自己做, 即使看了题解”会了“,也要自己码一遍。自己不亲自写一遍,里面的细节永远不知道。

- [面试题 17.09. 第 k 个数](../problems/get-kth-magic-number-lcci.md)

- [0002.add-two-numbers](../problems/2.add-two-numbers.md)
Expand Down Expand Up @@ -26,7 +32,7 @@
- [0073.set-matrix-zeroes](../problems/73.set-matrix-zeroes.md)
- [0075.sort-colors](../problems/75.sort-colors.md)
- [0078.subsets](../problems/78.subsets.md)
- [0079.word-search](../problems/79.word-search-en.md)
- [0079.word-search](../problems/79.word-search.md)
- [0080.remove-duplicates-from-sorted-array-ii](../problems/80.remove-duplicates-from-sorted-array-ii.md) 🆕
- [0086.partition-list](../problems/86.partition-list.md)
- [0090.subsets-ii](../problems/90.subsets-ii.md)
Expand Down
Binary file added cover.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions epilogue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# 后记

以上就是本电子书的全部内容了。如果你觉得这本书对你有用, 那么请将它分享给你身边的朋友,你的点赞和分享是我最大的动力。另外由于本人水平和精力有限,难免有不正确的地方,大家可以通过 github 的 pr 给我指正,感谢大家。

后期的话文章会第一时间在公众号和我的博客更新,并定期整理到这个电子书中来。因此你可以关注我的公众号或者博客, 也可以关注我的同步电子书的网站 [西法的刷题秘籍 - 在线版](https://leetcode-solution-leetcode-pp.gitbook.io/leetcode-solution/) 获得内容的更新。

如果想加入读者交流群, 在公众号回复 leetcode 即可,西法在群里等着你。

关注公众号《力扣加加》带你啃下算法这块硬骨头。

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

lucifer 的博客地址:https://lucifer.ren/blog/
31 changes: 28 additions & 3 deletions introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,40 @@
- 2019-10-08: [纪念 LeetCode 项目 Star 突破 2W](./thanksGiving2.md),并且 Github 搜索“LeetCode”,排名第一。

- 2020-04-12: [项目突破三万 Star](./thanksGiving3.md)

- 2020-04-14: 官网`力扣加加`上线啦 💐💐💐💐💐,有专题讲解,每日一题,下载区和视频题解,后续会增加更多内容,还不赶紧收藏起来?地址:http://leetcode-solution.cn/

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

## 前言

这是我将我的所有公开的算法资料整理的一个电子书,主要特点有:
这是我将我的所有公开的算法资料整理的一个电子书,全部题目信息中文化,以前会有一些英文描述,感谢 @CYL 的中文整理。

![](https://cdn.jsdelivr.net/gh/azl397985856/cdn/2020-10-17/1602928846461-image.png)


![](https://cdn.jsdelivr.net/gh/azl397985856/cdn/2020-10-17/1602928862442-image.png)

我写这本电子书花费了大量的时间和精力,除了内容上的创作,还要做一些电子书的排版,以让大家获得更好的阅读体验。光数学公式的展示,我就研究了多个插件的要源码,并魔改了一下才使得导出的电子书支持 latex。 不过有些动图,在做成电子书的时候自然就变没了,如果需要看动图的, 可以去我的公众号《力扣加加》或者我的 leetcode 题解仓库看。

由于是电子书,因此阅读体验可能会更好, 但是相应地就不能获得及时的更新,因此你可以收藏一下我的同步电子书的网站 [西法的刷题秘籍 - 在线版](https://leetcode-solution-leetcode-pp.gitbook.io/leetcode-solution/)。后期可能将每日一题, 91 天学算法其他章节的讲义等也整理进来。

电子书有更新我也会在公众号《力扣加加》进行通知, 感兴趣的同学可以关注一下。

目前导出了四种格式,可惜的是这几种格式都有自己的不足:

- 在线版。 实时更新,想要及时获取最新信息的可以用在线版。
- html。 方便大家在线观看,由于是 html ,实际上大家也可以保存起来**离线**观看。
- pdf。可使用 pdf 阅读器和浏览器(比如谷歌)直接观看,阅读体验一般,生成的目录不能导航。
- mobi。 下载一个 Kindle 客户端就可以看,不需要购买 Kindle。
- epub。 数学公式和主题都比较不错, 但是代码没有高亮。

大家选择适合自己的格式下载即可。

- [在线版](https://leetcode-solution-leetcode-pp.gitbook.io/leetcode-solution/)

- 全部题目信息中文化,以前会有一些英文描述。

后期可能将每日一题也整理进来
html, pdf,mobi 和 epub 格式,关注我的公众号《力扣加加》回复`电子书`即可

## 介绍

Expand Down Expand Up @@ -63,6 +86,8 @@ leetcode 题解,记录自己的 leetcode 解题之路。

## 食用指南

- 我对大部分题目的复杂度都进行了分析,除了个别分析起来复杂的题目,大家一定要对一道题的复杂度了如指掌才可以。
> 有些题目我是故意不写的, 比如所有的回溯题目我都没写, 不过它们全部都是指数的复杂度
- 我对题目难度进行了分类的保留,因此你可以根据自己的情况刷。我推荐大家从简单开始,逐步加大难度,直到困难。
- 这里有一张互联网公司面试中经常考察的问题类型总结的思维导图,我们可以结合图片中的信息分析一下。

Expand Down
5 changes: 5 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"dependencies": {
"mathjax": "^2.7.6"
}
}
2 changes: 1 addition & 1 deletion problems/1.two-sum.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ const twoSum = function (nums, target) {
- 时间复杂度:$O(N)$
- 空间复杂度:$O(N)$

更多题解可以访问我的LeetCode题解仓库:https://github.com/azl397985856/leetcode目前已经35K star啦。
更多题解可以访问我的LeetCode题解仓库:https://github.com/azl397985856/leetcode目前已经37K star啦。

关注公众号力扣加加,努力用清晰直白的语言还原解题思路,并且有大量图解,手把手教你识别套路,高效刷题。

Expand Down
6 changes: 3 additions & 3 deletions problems/101.symmetric-tree.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,8 @@ class Solution:
- 时间复杂度:$O(N)$,其中 N 为节点数。
- 空间复杂度:递归的深度最高为节点数,因此空间复杂度是 $O(N)$,其中 N 为节点数。

更多题解可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 30K star 啦。

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

![](https://tva1.sinaimg.cn/large/007S8ZIlly1ghlu9b4p9ej30x20iwjtf.jpg)
5 changes: 3 additions & 2 deletions problems/1011.capacity-to-ship-packages-within-d-days.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ var shipWithinDays = function(weights, D) {
};
```

## 扩展
**复杂度分析**

## 参考
- 时间复杂度:$O(logN)$
- 空间复杂度:$O(N)$
9 changes: 9 additions & 0 deletions problems/1014.best-sightseeing-pair.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,3 +103,12 @@ class Solution:
pre = pre if pre > A[i] + i else A[i] + i
return res
```

**复杂度分析**

- 时间复杂度:$O(N)$
- 空间复杂度:$O(N)$

大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。
大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
![](https://tva1.sinaimg.cn/large/007S8ZIlly1gfcuzagjalj30p00dwabs.jpg)
4 changes: 0 additions & 4 deletions problems/1015.smallest-integer-divisible-by-k.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,6 @@ class Solution:
if mod == 0:
return ix
seen.add(mod)

# @lc code=end


```

## 相关题目
Expand Down
7 changes: 7 additions & 0 deletions problems/1019.next-greater-node-in-linked-list.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,13 @@ class Solution:
return res
```

**复杂度分析**

其中 N 为链表的长度。

- 时间复杂度:$O(N)$
- 空间复杂度:$O(N)$

## 扩展

甚至可以做到 O(1)的空间复杂度,请参考[C# O(n) time O(1) space](<https://leetcode.com/problems/next-greater-node-in-linked-list/discuss/267090/C-O(n)-time-O(1)-space>)
Expand Down
21 changes: 15 additions & 6 deletions problems/1020.number-of-enclaves.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ https://leetcode-cn.com/problems/number-of-enclaves/
返回网格中无法在任意次数的移动中离开网格边界的陆地单元格的数量。
 
示例 1:
Expand Down Expand Up @@ -53,14 +52,14 @@ https://leetcode-cn.com/problems/number-of-enclaves/

- 如果遍历到 0,我们不予理会
- 如果遍历到 1. 我们将其加到 temp
- 我们不断拓展边界(上下左右)
- 如果 dfs 过程中碰到了边界,说明我们可以逃脱,我们将累加的 temp 清空
- 如果 dfs 过程之后没有碰到边界,说明我们无法逃脱。我们将 temp 加到 cnt
- 不断拓展边界(上下左右)
- 如果 dfs 过程中碰到了边界,说明可以逃脱,我们将累加的 temp 清空
- 如果 dfs 过程之后没有碰到边界,说明无法逃脱。我们将 temp 加到 cnt
- 最终返回 cnt 即可

### 关键点解析

- visited 记录访问过的节点,防止重复计算
- visited 记录访问过的节点,防止无限循环。

### 代码

Expand Down Expand Up @@ -102,6 +101,11 @@ class Solution:

```

**复杂度分析**

- 时间复杂度:$O(M * N)$
- 空间复杂度:$O(M * N)$

## 解法二 (消除法)

## 公司
Expand All @@ -110,7 +114,7 @@ class Solution:

### 思路

上面的解法时间复杂度和空间复杂度都很差,我们考虑进行优化, 这里我们使用消除法。
上面的解法空间复杂度很差,我们考虑进行优化, 这里我们使用消除法。即使用题目范围外的数据原地标记是否访问, 这样时间复杂度可以优化到 $O(1)$,这是一种非常常见的优化技巧,请务必掌握,另外文章末尾的题目也是类似的技巧,大家可以结合起来练习

- 从矩阵边界开始 dfs
- 如果碰到 1 就将其变成 0
Expand Down Expand Up @@ -167,6 +171,11 @@ class Solution:

```

**复杂度分析**

- 时间复杂度:$O(M * N)$
- 空间复杂度:$O(1)$

## 参考

- [200.number-of-islands](https://github.com/azl397985856/leetcode/blob/master/problems/200.number-of-islands.md)
7 changes: 7 additions & 0 deletions problems/1023.camelcase-matching.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,13 @@ class Solution:
return res
```

**复杂度分析**

其中 N 为 queries 的长度, M 为 queries 的平均长度, P 为 pattern 的长度。

- 时间复杂度:$O(N * M * P)$
- 空间复杂度:$O(1)$

## 扩展

这是一个符合直觉的解法,但是却不是一个很优秀的解法,那么你有想到什么优秀的解法么?
Expand Down
Loading

0 comments on commit bff75b1

Please sign in to comment.