mirror of
https://github.com/krahets/LeetCode-Book.git
synced 2026-01-12 00:19:02 +08:00
Update README and gitignore
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
__pycache__
|
||||
.vscode
|
||||
.DS_Store
|
||||
.vscode
|
||||
*.xlsx
|
||||
|
||||
50
README.md
50
README.md
@@ -1,10 +1,10 @@
|
||||
<p align="center">
|
||||
<p align="left">
|
||||
<a href="https://leetcode-cn.com/leetbook/detail/illustration-of-algorithm/">
|
||||
<img src="https://pic.leetcode-cn.com/1599187248-gDiWnC-image.png" width="490">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<p align="left">
|
||||
<img src="https://img.shields.io/badge/LeetCode%20tests-75%20accepted-brightgreen">
|
||||
<img src="https://img.shields.io/badge/Language-Python-teal">
|
||||
<img src="https://img.shields.io/badge/Language-Java-orange">
|
||||
@@ -13,39 +13,51 @@
|
||||
|
||||
[《图解算法数据结构》](https://leetcode-cn.com/leetbook/detail/illustration-of-algorithm/)是一本面向算法初学者和互联网求职者编写的 LeetBook 手册。
|
||||
|
||||
- 图文详解 75 道题目,覆盖主要算法知识点,非常适合作为算法学习的第一份题库。
|
||||
- 图文详解 75 道题目,覆盖主要算法知识点。
|
||||
- 题目活跃于各大互联网公司招聘中,可使笔面试准备事半功倍。
|
||||
- 致力于行文深入浅出、图文搭配,提供简洁的 Python, Java, C++ 解题代码。
|
||||
|
||||
> 若本 LeetBook 对您有所帮助,请在页面右上角点个 Star :star: 支持一下,谢谢!
|
||||
|
||||
本仓库包含“图解算法数据结构”、“Krahets 笔面试精选 88 题”和“剑指 Offer”的题解内容,所有代码皆可一键运行:
|
||||
|
||||
```shell
|
||||
LeetCode-Book
|
||||
├── leetbook_ioa # 《图解算法数据结构》题解和专栏文档、代码
|
||||
├── selected_coding_interview # 「Krahets 笔面试精选 88 题」题解文档、代码
|
||||
└── sword_for_offer # 《剑指 Offer》题解文档、代码、刷题计划
|
||||
```
|
||||
|
||||
## 如何入门算法?
|
||||
|
||||
### 第一步:看入门书
|
||||
|
||||
<p align="center">
|
||||
<img src="https://www.hello-algo.com/index.assets/conceptual_rendering.png" width="175">
|
||||
<p align="left" href="https://github.com/krahets/hello-algo">
|
||||
<img src="https://www.hello-algo.com/index.assets/conceptual_rendering.png" width="170">
|
||||
<img src="https://www.hello-algo.com/index.assets/hello_algo_mindmap_tp.png" width="280">
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
《Hello 算法》:动画图解、一键运行的数据结构与算法教程
|
||||
</p>
|
||||
[《Hello 算法》](https://github.com/krahets/hello-algo):动画图解、一键运行的数据结构与算法教程。
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/krahets/hello-algo">
|
||||
前往仓库 >
|
||||
</a>
|
||||
|
||||
<a href="https://www.hello-algo.com/">
|
||||
在线阅读 >
|
||||
</a>
|
||||
</p>
|
||||
这本书旨在引导初学者探索数据结构与算法的知识地图,掌握完整的刷题工具库。
|
||||
|
||||
### 第二步:刷算法题
|
||||
|
||||
1. [Krahets 笔面试精选 88 题](https://leetcode.cn/studyplan/selected-coding-interview/):由“剑指 Offer”和“Hot 100”组成的高频面试题单。
|
||||
2. [图解算法数据结构](https://leetcode-cn.com/leetbook/detail/illustration-of-algorithm/)或[Interview-75](https://leetcode.cn/studyplan/coding-interviews/):题目更贴近实际应用,相对“剑指 Offer”难度有所增加。
|
||||
推荐以下 LeetCode 题单(前两项 [@Krahets](https://leetcode.cn/u/jyd/) 题解全覆盖):
|
||||
|
||||
1. [Krahets 笔面试精选 88 题](https://leetcode.cn/studyplan/selected-coding-interview/):从“剑指 Offer”和“热题 100”精选出的 88 道高频算法笔试题。
|
||||
2. [图解算法数据结构](https://leetcode-cn.com/leetbook/detail/illustration-of-algorithm/)([Interview-75](https://leetcode.cn/studyplan/coding-interviews/)):题目更贴近实际应用,相对“剑指 Offer”难度有所增加。
|
||||
3. [LeetCode 热题 100](https://leetcode.cn/studyplan/top-100-liked/):力扣用户最喜爱的 100 道题。
|
||||
4. [面试经典 150 题](https://leetcode.cn/studyplan/top-interview-150/):150 道经典面试力扣题。
|
||||
5. [LeetCode-75](https://leetcode.cn/studyplan/leetcode-75/):精选面试必备的 75 道核心题目。
|
||||
|
||||
对初学者的刷题建议:
|
||||
|
||||
1. 建议每日刷 2~3 题。若能轻松完成,可以尝试增加至 5~8 题。请注意,刷题的质量远重要于数量。务必确保你真正理解了每个题目的解法及背后的算法原理。
|
||||
2. 建议你按照目录顺序逐题解答。如果碰到某些难以解决的题目,可以先跳过,稍后回顾时再挑战。
|
||||
3. 很多题目都有不止一种解法,请你注意比较和探讨各种方法的特点和适用情况。
|
||||
4. 如果你发现自己忘记了某个题目的解法,不必灰心。艾宾浩斯遗忘曲线指出,通常需要复习至少三次,才能真正掌握一个知识点。
|
||||
5. 行百里者半九十。坚持至关重要,加油,相信你可以做到!
|
||||
|
||||
## License
|
||||
|
||||
|
||||
119
sword_for_offer/剑指 Offer 刷题计划.md
Executable file
119
sword_for_offer/剑指 Offer 刷题计划.md
Executable file
@@ -0,0 +1,119 @@
|
||||
# 剑指 Offer 刷题计划
|
||||
|
||||
剑指 Offer 系列题目非常适合作为算法入门题目集,尤其适合有互联网求职需求的同学们,能够让我们全面练习,快速搭建起算法与数据结构的知识框架。
|
||||
|
||||
- 算法: 动态规划、回溯算法、查找算法、搜索算法、贪心算法、分治算法、位运算、双指针、排序、模拟、数学、……
|
||||
- 数据结构: 数组、栈、队列、字符串、链表、树、图、堆、哈希表、……
|
||||
|
||||
笔者整理了本刷题计划,核心理念为从易到难、从基础类题目到综合类题目,供希望按照知识点类型顺序刷题的小伙伴们参考。
|
||||
|
||||
> 行百里者半九十。坚持一个月刷完,一起加油!
|
||||
|
||||
| 日程 | 题目 |
|
||||
| :--------: | :-------------------------------------------- |
|
||||
| **Day 1** | **栈与队列(简单)** |
|
||||
| | 剑指 Offer 09. 用两个栈实现队列 |
|
||||
| | 剑指 Offer 30. 包含 min 函数的栈 |
|
||||
| **Day 2** | **链表(简单)** |
|
||||
| | 剑指 Offer 06. 从尾到头打印链表 |
|
||||
| | 剑指 Offer 24. 反转链表 |
|
||||
| | 剑指 Offer 35. 复杂链表的复制 |
|
||||
| **Day 3** | **字符串(简单)** |
|
||||
| | 剑指 Offer 05. 替换空格 |
|
||||
| | 剑指 Offer 58 - II. 左旋转字符串 |
|
||||
| **Day 4** | **查找算法(简单)** |
|
||||
| | 剑指 Offer 03. 数组中重复的数字 |
|
||||
| | 剑指 Offer 53 - I. 在排序数组中查找数字 I |
|
||||
| | 剑指 Offer 53 - II. 0~n-1 中缺失的数字 |
|
||||
| **Day 5** | **查找算法(中等)** |
|
||||
| | 剑指 Offer 04. 二维数组中的查找 |
|
||||
| | 剑指 Offer 11. 旋转数组的最小数字 |
|
||||
| | 剑指 Offer 50. 第一个只出现一次的字符 |
|
||||
| **Day 6** | **搜索与回溯算法(简单)** |
|
||||
| | 剑指 Offer 32 - I. 从上到下打印二叉树 |
|
||||
| | 剑指 Offer 32 - II. 从上到下打印二叉树 II |
|
||||
| | 剑指 Offer 32 - III. 从上到下打印二叉树 III |
|
||||
| **Day 7** | **搜索与回溯算法(简单)** |
|
||||
| | 剑指 Offer 26. 树的子结构 |
|
||||
| | 剑指 Offer 27. 二叉树的镜像 |
|
||||
| | 剑指 Offer 28. 对称的二叉树 |
|
||||
| **Day 8** | **动态规划(简单)** |
|
||||
| | 剑指 Offer 10- I. 斐波那契数列 |
|
||||
| | 剑指 Offer 10- II. 青蛙跳台阶问题 |
|
||||
| | 剑指 Offer 63. 股票的最大利润 |
|
||||
| **Day 9** | **动态规划(中等)** |
|
||||
| | 剑指 Offer 42. 连续子数组的最大和 |
|
||||
| | 剑指 Offer 47. 礼物的最大价值 |
|
||||
| **Day 10** | **动态规划(中等)** |
|
||||
| | 剑指 Offer 46. 把数字翻译成字符串 |
|
||||
| | 剑指 Offer 48. 最长不含重复字符的子字符串 |
|
||||
| **Day 11** | **双指针(简单)** |
|
||||
| | 剑指 Offer 18. 删除链表的节点 |
|
||||
| | 剑指 Offer 22. 链表中倒数第 k 个节点 |
|
||||
| **Day 12** | **双指针(简单)** |
|
||||
| | 剑指 Offer 25. 合并两个排序的链表 |
|
||||
| | 剑指 Offer 52. 两个链表的第一个公共节点 |
|
||||
| **Day 13** | **双指针(简单)** |
|
||||
| | 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 |
|
||||
| | 剑指 Offer 57. 和为 s 的两个数字 |
|
||||
| | 剑指 Offer 58 - I. 翻转单词顺序 |
|
||||
| **Day 14** | **搜索与回溯算法(中等)** |
|
||||
| | 剑指 Offer 12. 矩阵中的路径 |
|
||||
| | 剑指 Offer 13. 机器人的运动范围 |
|
||||
| **Day 15** | **搜索与回溯算法(中等)** |
|
||||
| | 剑指 Offer 34. 二叉树中和为某一值的路径 |
|
||||
| | 剑指 Offer 36. 二叉搜索树与双向链表 |
|
||||
| | 剑指 Offer 54. 二叉搜索树的第 k 大节点 |
|
||||
| **Day 16** | **排序(简单)** |
|
||||
| | 剑指 Offer 45. 把数组排成最小的数 |
|
||||
| | 剑指 Offer 61. 扑克牌中的顺子 |
|
||||
| **Day 17** | **排序(中等)** |
|
||||
| | 剑指 Offer 40. 最小的 k 个数 |
|
||||
| | 剑指 Offer 41. 数据流中的中位数 |
|
||||
| **Day 18** | **搜索与回溯算法(中等)** |
|
||||
| | 剑指 Offer 55 - I. 二叉树的深度 |
|
||||
| | 剑指 Offer 55 - II. 平衡二叉树 |
|
||||
| **Day 19** | **搜索与回溯算法(中等)** |
|
||||
| | 剑指 Offer 64. 求 1 + 2 + … + n |
|
||||
| | 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 |
|
||||
| | 剑指 Offer 68 - II. 二叉树的最近公共祖先 |
|
||||
| **Day 20** | **分治算法(中等)** |
|
||||
| | 剑指 Offer 07. 重建二叉树 |
|
||||
| | 剑指 Offer 16. 数值的整数次方 |
|
||||
| | 剑指 Offer 33. 二叉搜索树的后序遍历序列 |
|
||||
| **Day 21** | **位运算(简单)** |
|
||||
| | 剑指 Offer 15. 二进制中 1 的个数 |
|
||||
| | 剑指 Offer 65. 不用加减乘除做加法 |
|
||||
| **Day 22** | **位运算(中等)** |
|
||||
| | 剑指 Offer 56 - I. 数组中数字出现的次数 |
|
||||
| | 剑指 Offer 56 - II. 数组中数字出现的次数 II |
|
||||
| **Day 23** | **数学(简单)** |
|
||||
| | 剑指 Offer 39. 数组中出现次数超过一半的数字 |
|
||||
| | 剑指 Offer 66. 构建乘积数组 |
|
||||
| **Day 24** | **数学(中等)** |
|
||||
| | 剑指 Offer 14- I. 剪绳子 |
|
||||
| | 剑指 Offer 57 - II. 和为 s 的连续正数序列 |
|
||||
| | 剑指 Offer 62. 圆圈中最后剩下的数字 |
|
||||
| **Day 25** | **模拟(中等)** |
|
||||
| | 剑指 Offer 29. 顺时针打印矩阵 |
|
||||
| | 剑指 Offer 31. 栈的压入、弹出序列 |
|
||||
| **Day 26** | **字符串(中等)** |
|
||||
| | 剑指 Offer 20. 表示数值的字符串 |
|
||||
| | 剑指 Offer 67. 把字符串转换成整数 |
|
||||
| **Day 27** | **栈与队列(困难)** |
|
||||
| | 剑指 Offer 59 - I. 滑动窗口的最大值 |
|
||||
| | 剑指 Offer 59 - II. 队列的最大值 |
|
||||
| **Day 28** | **搜索与回溯算法(困难)** |
|
||||
| | 剑指 Offer 37. 序列化二叉树 |
|
||||
| | 剑指 Offer 38. 字符串的排列 |
|
||||
| **Day 29** | **动态规划(困难)** |
|
||||
| | 剑指 Offer 19. 正则表达式匹配 |
|
||||
| | 剑指 Offer 49. 丑数 |
|
||||
| | 剑指 Offer 60. n 个骰子的点数 |
|
||||
| **Day 30** | **分治算法(困难)** |
|
||||
| | 剑指 Offer 17. 打印从 1 到最大的 n 位数 |
|
||||
| | 剑指 Offer 51. 数组中的逆序对 |
|
||||
| **Day 31** | **数学(困难)** |
|
||||
| | 剑指 Offer 14- II. 剪绳子 II |
|
||||
| | 剑指 Offer 43. 1~n 整数中 1 出现的次数 |
|
||||
| | 剑指 Offer 44. 数字序列中某一位的数字 |
|
||||
81
sword_for_offer/剑指 Offer 题目分类.md
Executable file
81
sword_for_offer/剑指 Offer 题目分类.md
Executable file
@@ -0,0 +1,81 @@
|
||||
# 剑指 Offer 题目分类
|
||||
|
||||
下表划分了各题使用的算法与数据结构。由于题目可能存在多种解法,本表格只列举最优解法(时间与空间复杂度最低)的对应算法。
|
||||
|
||||
| 题目 | 算法分类 | 数据结构分类 |
|
||||
| ---------------------------------- | ------------------------ | --------------- |
|
||||
| 03. 数组中重复的数字 | 查找算法 | 数组 |
|
||||
| 04. 二维数组中的查找 | 查找算法 | 数组 |
|
||||
| 05. 替换空格 | | 字符串 |
|
||||
| 06. 从尾到头打印链表 | | 栈 / 队列,链表 |
|
||||
| 07. 重建二叉树 | 分治算法 | 树,哈希表 |
|
||||
| 09. 用两个栈实现队列 | | 栈 / 队列 |
|
||||
| 10-I. 斐波那契数列 | 动态规划 | |
|
||||
| 10-II. 青蛙跳台阶问题 | 动态规划 | |
|
||||
| 11. 旋转数组的最小数字 | 查找算法 | 数组 |
|
||||
| 12. 矩阵中的路径 | 回溯算法,搜索算法 | 数组,图 |
|
||||
| 13. 机器人的运动范围 | 回溯算法,搜索算法 | 数组,图 |
|
||||
| 14-I. 剪绳子 | 贪心算法,数学 | |
|
||||
| 14- II. 剪绳子 II | 贪心算法,分治算法,数学 | |
|
||||
| 15. 二进制中 1 的个数 | 位运算 | |
|
||||
| 16. 数值的整数次方 | 分治算法,位运算 | |
|
||||
| 17. 打印从 1 到最大的 n 位数 | | 数组 |
|
||||
| 18. 删除链表的节点 | 双指针 | 链表 |
|
||||
| 19. 正则表达式匹配 | 动态规划 | 字符串 |
|
||||
| 20. 表示数值的字符串 | | 字符串 |
|
||||
| 21. 调整数组顺序使奇数位于偶数前面 | 双指针 | 数组 |
|
||||
| 22. 链表中倒数第 k 个节点 | 双指针 | 链表 |
|
||||
| 24. 反转链表 | 双指针 | 链表 |
|
||||
| 25. 合并两个排序的链表 | 双指针 | 链表 |
|
||||
| 26. 树的子结构 | 搜索算法 | 树 |
|
||||
| 27. 二叉树的镜像 | 搜索算法 | 栈 / 队列,树 |
|
||||
| 28. 对称的二叉树 | 搜索算法 | 树 |
|
||||
| 29. 顺时针打印矩阵 | 模拟 | 数组 |
|
||||
| 30. 包含 min 函数的栈 | 排序 | 栈 / 队列 |
|
||||
| 31. 栈的压入、弹出序列 | 模拟 | 栈 / 队列 |
|
||||
| 32-I. 从上到下打印二叉树 | 搜索算法 | 栈 / 队列,树 |
|
||||
| 32-II. 从上到下打印二叉树 II | 搜索算法 | 栈 / 队列,树 |
|
||||
| 32-III. 从上到下打印二叉树 III | 搜索算法 | 栈 / 队列,树 |
|
||||
| 33. 二叉搜索树的后序遍历序列 | 分治算法 | 栈 / 队列,树 |
|
||||
| 34. 二叉树中和为某一值的路径 | 回溯算法,搜索算法 | 树 |
|
||||
| 35. 复杂链表的复制 | | 链表 |
|
||||
| 36. 二叉搜索树与双向链表 | 搜索算法,双指针 | 树 |
|
||||
| 37. 序列化二叉树 | 搜索算法 | 树 |
|
||||
| 38. 字符串的排列 | 回溯算法 | 字符串,哈希表 |
|
||||
| 39. 数组中出现次数超过一半的数字 | | 数组 |
|
||||
| 40. 最小的 k 个数 | 排序 | 数组,堆 |
|
||||
| 41. 数据流中的中位数 | 排序 | 堆 |
|
||||
| 42. 连续子数组的最大和 | 动态规划 | 数组 |
|
||||
| 43. 1 ~ n整数中 1 出现的次数 | 数学 | |
|
||||
| 44. 数字序列中某一位的数字 | 数学 | |
|
||||
| 45. 把数组排成最小的数 | 排序 | 字符串 |
|
||||
| 46. 把数字翻译成字符串 | 动态规划 | 字符串 |
|
||||
| 47. 礼物的最大价值 | 动态规划 | 数组 |
|
||||
| 48. 最长不含重复字符的子字符串 | 动态规划,双指针 | 哈希表 |
|
||||
| 49. 丑数 | 动态规划 | |
|
||||
| 50. 第一个只出现一次的字符 | | 哈希表 |
|
||||
| 51. 数组中的逆序对 | 分治算法 | 数组 |
|
||||
| 52. 两个链表的第一个公共节点 | 双指针 | 链表 |
|
||||
| 53-I. 在排序数组中查找数字 I | 查找算法 | 数组 |
|
||||
| 53-II. 0 ~ n - 1 中缺失的数字 | 查找算法 | 数组 |
|
||||
| 54. 二叉搜索树的第 k 大节点 | 搜索算法 | 树 |
|
||||
| 55-I. 二叉树的深度 | 搜索算法 | 树 |
|
||||
| 55-II. 平衡二叉树 | 搜索算法 | 树 |
|
||||
| 56-I. 数组中数字出现的次数 | 位运算 | 数组 |
|
||||
| 56-II. 数组中数字出现的次数 II | 位运算 | 数组 |
|
||||
| 57. 和为 s 的两个数字 | 双指针 | 数组 |
|
||||
| 57-II. 和为 s 的连续正数序列 | 双指针 | 数组 |
|
||||
| 58-I. 翻转单词顺序 | 双指针 | 字符串 |
|
||||
| 58-II. 左旋转字符串 | | 字符串 |
|
||||
| 59-I. 滑动窗口的最大值 | 排序 | 数组,栈 / 队列 |
|
||||
| 59-II. 队列的最大值 | 排序 | 数组,栈 / 队列 |
|
||||
| 60. n 个骰子的点数 | 动态规划 | |
|
||||
| 61. 扑克牌中的顺子 | 排序 | 数组,哈希表 |
|
||||
| 62. 圆圈中最后剩下的数字 | 数学 | |
|
||||
| 63. 股票的最大利润 | 动态规划 | 数组 |
|
||||
| 64. 求 1 + 2 + … + n | | |
|
||||
| 65. 不用加减乘除做加法 | 位运算 | |
|
||||
| 66. 构建乘积数组 | 数学 | 数组 |
|
||||
| 67. 把字符串转换成整数 | | 字符串 |
|
||||
| 68-I. 二叉搜索树的最近公共祖先 | 搜索算法 | 树 |
|
||||
| 68-II. 二叉树的最近公共祖先 | 搜索算法 | 树 |
|
||||
Reference in New Issue
Block a user