|
1 |
| -# 目录 |
| 1 | +# 前言 |
| 2 | + |
| 3 | +题目来自《何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.》,刷题网站推荐: |
| 4 | + |
| 5 | +- [牛客网](notes/https://www.nowcoder.com/ta/coding-interviews?from=cyc_github) |
| 6 | +- [Leetcode](notes/https://leetcode-cn.com/problemset/lcof/) |
| 7 | + |
| 8 | +# 树 |
2 | 9 |
|
3 |
| -- [3. 数组中重复的数字](notes/3.%20数组中重复的数字.md) |
4 |
| -- [4. 二维数组中的查找](notes/4.%20二维数组中的查找.md) |
5 |
| -- [5. 替换空格](notes/5.%20替换空格.md) |
6 |
| -- [6. 从尾到头打印链表](notes/6.%20从尾到头打印链表.md) |
7 | 10 | - [7. 重建二叉树](notes/7.%20重建二叉树.md)
|
8 | 11 | - [8. 二叉树的下一个结点](notes/8.%20二叉树的下一个结点.md)
|
9 |
| -- [9. 用两个栈实现队列](notes/9.%20用两个栈实现队列.md) |
10 |
| -- [10.1 斐波那契数列](notes/10.1%20斐波那契数列.md) |
11 |
| -- [10.2 矩形覆盖](notes/10.2%20矩形覆盖.md) |
12 |
| -- [10.3 跳台阶](notes/10.3%20跳台阶.md) |
13 |
| -- [10.4 变态跳台阶](notes/10.4%20变态跳台阶.md) |
14 |
| -- [11. 旋转数组的最小数字](notes/11.%20旋转数组的最小数字.md) |
15 |
| -- [12. 矩阵中的路径](notes/12.%20矩阵中的路径.md) |
16 |
| -- [13. 机器人的运动范围](notes/13.%20机器人的运动范围.md) |
17 |
| -- [14. 剪绳子](notes/14.%20剪绳子.md) |
18 |
| -- [15. 二进制中 1 的个数](notes/15.%20二进制中%201%20的个数.md) |
19 |
| -- [16. 数值的整数次方](notes/16.%20数值的整数次方.md) |
20 |
| -- [17. 打印从 1 到最大的 n 位数](notes/17.%20打印从%201%20到最大的%20n%20位数.md) |
21 |
| -- [18.1 在 O(1) 时间内删除链表节点](notes/18.1%20在%20O(1)%20时间内删除链表节点.md) |
22 |
| -- [18.2 删除链表中重复的结点](notes/18.2%20删除链表中重复的结点.md) |
23 |
| -- [19. 正则表达式匹配](notes/19.%20正则表达式匹配.md) |
24 |
| -- [20. 表示数值的字符串](notes/20.%20表示数值的字符串.md) |
25 |
| -- [21. 调整数组顺序使奇数位于偶数前面](notes/21.%20调整数组顺序使奇数位于偶数前面.md) |
26 |
| -- [22. 链表中倒数第 K 个结点](notes/22.%20链表中倒数第%20K%20个结点.md) |
27 |
| -- [23. 链表中环的入口结点](notes/23.%20链表中环的入口结点.md) |
28 |
| -- [24. 反转链表](notes/24.%20反转链表.md) |
29 |
| -- [25. 合并两个排序的链表](notes/25.%20合并两个排序的链表.md) |
30 | 12 | - [26. 树的子结构](notes/26.%20树的子结构.md)
|
31 | 13 | - [27. 二叉树的镜像](notes/27.%20二叉树的镜像.md)
|
32 | 14 | - [28. 对称的二叉树](notes/28.%20对称的二叉树.md)
|
33 |
| -- [29. 顺时针打印矩阵](notes/29.%20顺时针打印矩阵.md) |
34 |
| -- [30. 包含 min 函数的栈](notes/30.%20包含%20min%20函数的栈.md) |
35 |
| -- [31. 栈的压入、弹出序列](notes/31.%20栈的压入、弹出序列.md) |
36 | 15 | - [32.1 从上往下打印二叉树](notes/32.1%20从上往下打印二叉树.md)
|
37 | 16 | - [32.2 把二叉树打印成多行](notes/32.2%20把二叉树打印成多行.md)
|
38 | 17 | - [32.3 按之字形顺序打印二叉树](notes/32.3%20按之字形顺序打印二叉树.md)
|
39 | 18 | - [33. 二叉搜索树的后序遍历序列](notes/33.%20二叉搜索树的后序遍历序列.md)
|
40 | 19 | - [34. 二叉树中和为某一值的路径](notes/34.%20二叉树中和为某一值的路径.md)
|
41 |
| -- [35. 复杂链表的复制](notes/35.%20复杂链表的复制.md) |
42 | 20 | - [36. 二叉搜索树与双向链表](notes/36.%20二叉搜索树与双向链表.md)
|
43 | 21 | - [37. 序列化二叉树](notes/37.%20序列化二叉树.md)
|
44 |
| -- [38. 字符串的排列](notes/38.%20字符串的排列.md) |
45 |
| -- [39. 数组中出现次数超过一半的数字](notes/39.%20数组中出现次数超过一半的数字.md) |
| 22 | +- [54. 二叉查找树的第 K 个结点](notes/54.%20二叉查找树的第%20K%20个结点.md) |
| 23 | +- [55.1 二叉树的深度](notes/55.1%20二叉树的深度.md) |
| 24 | +- [55.2 平衡二叉树](notes/55.2%20平衡二叉树.md) |
| 25 | +- [68. 树中两个节点的最低公共祖先](notes/68.%20树中两个节点的最低公共祖先.md) |
| 26 | + |
| 27 | +# 链表 |
| 28 | + |
| 29 | +- [6. 从尾到头打印链表](notes/6.%20从尾到头打印链表.md) |
| 30 | +- [18.1 在 O(1) 时间内删除链表节点](notes/18.1%20在%20O(1)%20时间内删除链表节点.md) |
| 31 | +- [18.2 删除链表中重复的结点](notes/18.2%20删除链表中重复的结点.md) |
| 32 | +- [22. 链表中倒数第 K 个结点](notes/22.%20链表中倒数第%20K%20个结点.md) |
| 33 | +- [23. 链表中环的入口结点](notes/23.%20链表中环的入口结点.md) |
| 34 | +- [24. 反转链表](notes/24.%20反转链表.md) |
| 35 | +- [25. 合并两个排序的链表](notes/25.%20合并两个排序的链表.md) |
| 36 | +- [35. 复杂链表的复制](notes/35.%20复杂链表的复制.md) |
| 37 | +- [52. 两个链表的第一个公共结点](notes/52.%20两个链表的第一个公共结点.md) |
| 38 | + |
| 39 | +# 数组与矩阵 |
| 40 | + |
| 41 | +- [3. 数组中重复的数字](notes/3.%20数组中重复的数字.md) |
| 42 | +- [4. 二维数组中的查找](notes/4.%20二维数组中的查找.md) |
| 43 | +- [5. 替换空格](notes/5.%20替换空格.md) |
| 44 | +- [21. 调整数组顺序使奇数位于偶数前面](notes/21.%20调整数组顺序使奇数位于偶数前面.md) |
| 45 | +- [29. 顺时针打印矩阵](notes/29.%20顺时针打印矩阵.md) |
| 46 | + |
| 47 | +# 栈队列堆 |
| 48 | + |
| 49 | +- [9. 用两个栈实现队列](notes/9.%20用两个栈实现队列.md) |
| 50 | +- [30. 包含 min 函数的栈](notes/30.%20包含%20min%20函数的栈.md) |
| 51 | +- [31. 栈的压入、弹出序列](notes/31.%20栈的压入、弹出序列.md) |
| 52 | + |
46 | 53 | - [40. 最小的 K 个数](notes/40.%20最小的%20K%20个数.md)
|
47 | 54 | - [41.1 数据流中的中位数](notes/41.1%20数据流中的中位数.md)
|
48 | 55 | - [41.2 字符流中第一个不重复的字符](notes/41.2%20字符流中第一个不重复的字符.md)
|
49 |
| -- [42. 连续子数组的最大和](notes/42.%20连续子数组的最大和.md) |
50 |
| -- [43. 从 1 到 n 整数中 1 出现的次数](notes/43.%20从%201%20到%20n%20整数中%201%20出现的次数.md) |
51 |
| -- [44. 数字序列中的某一位数字](notes/44.%20数字序列中的某一位数字.md) |
52 |
| -- [45. 把数组排成最小的数](notes/45.%20把数组排成最小的数.md) |
53 |
| -- [46. 把数字翻译成字符串](notes/46.%20把数字翻译成字符串.md) |
54 |
| -- [47. 礼物的最大价值](notes/47.%20礼物的最大价值.md) |
55 |
| -- [48. 最长不含重复字符的子字符串](notes/48.%20最长不含重复字符的子字符串.md) |
56 |
| -- [49. 丑数](notes/49.%20丑数.md) |
| 56 | +- [59. 滑动窗口的最大值](notes/59.%20滑动窗口的最大值.md) |
| 57 | + |
| 58 | +# HashMap |
| 59 | + |
57 | 60 | - [50. 第一个只出现一次的字符位置](notes/50.%20第一个只出现一次的字符位置.md)
|
58 |
| -- [51. 数组中的逆序对](notes/51.%20数组中的逆序对.md) |
59 |
| -- [52. 两个链表的第一个公共结点](notes/52.%20两个链表的第一个公共结点.md) |
60 |
| -- [53. 数字在排序数组中出现的次数](notes/53.%20数字在排序数组中出现的次数.md) |
61 |
| -- [54. 二叉查找树的第 K 个结点](notes/54.%20二叉查找树的第%20K%20个结点.md) |
62 |
| -- [55.1 二叉树的深度](notes/55.1%20二叉树的深度.md) |
63 |
| -- [55.2 平衡二叉树](notes/55.2%20平衡二叉树.md) |
64 |
| -- [56. 数组中只出现一次的数字](notes/56.%20数组中只出现一次的数字.md) |
| 61 | + |
| 62 | + |
| 63 | +# 双指针 |
| 64 | + |
65 | 65 | - [57.1 和为 S 的两个数字](notes/57.1%20和为%20S%20的两个数字.md)
|
66 | 66 | - [57.2 和为 S 的连续正数序列](notes/57.2%20和为%20S%20的连续正数序列.md)
|
67 | 67 | - [58.1 翻转单词顺序列](notes/58.1%20翻转单词顺序列.md)
|
68 | 68 | - [58.2 左旋转字符串](notes/58.2%20左旋转字符串.md)
|
69 |
| -- [59. 滑动窗口的最大值](notes/59.%20滑动窗口的最大值.md) |
| 69 | +# 贪心思想 |
| 70 | + |
| 71 | +- [14. 剪绳子](notes/14.%20剪绳子.md) |
| 72 | + |
| 73 | +# 二分查找 |
| 74 | + |
| 75 | +- [11. 旋转数组的最小数字](notes/11.%20旋转数组的最小数字.md) |
| 76 | +- [53. 数字在排序数组中出现的次数](notes/53.%20数字在排序数组中出现的次数.md) |
| 77 | + |
| 78 | +# 分治 |
| 79 | + |
| 80 | +- [16. 数值的整数次方](notes/16.%20数值的整数次方.md) |
| 81 | + |
| 82 | +# 搜索 |
| 83 | + |
| 84 | +- [12. 矩阵中的路径](notes/12.%20矩阵中的路径.md) |
| 85 | +- [13. 机器人的运动范围](notes/13.%20机器人的运动范围.md) |
| 86 | +- [38. 字符串的排列](notes/38.%20字符串的排列.md) |
70 | 87 | - [60. n 个骰子的点数](notes/60.%20n%20个骰子的点数.md)
|
71 | 88 | - [61. 扑克牌顺子](notes/61.%20扑克牌顺子.md)
|
72 |
| -- [62. 圆圈中最后剩下的数](notes/62.%20圆圈中最后剩下的数.md) |
| 89 | + |
| 90 | +# 排序 |
| 91 | + |
| 92 | +- [45. 把数组排成最小的数](notes/45.%20把数组排成最小的数.md) |
| 93 | +- [51. 数组中的逆序对](notes/51.%20数组中的逆序对.md) |
| 94 | + |
| 95 | +# 动态规划 |
| 96 | + |
| 97 | +- [10.1 斐波那契数列](notes/10.1%20斐波那契数列.md) |
| 98 | +- [10.2 矩形覆盖](notes/10.2%20矩形覆盖.md) |
| 99 | +- [10.3 跳台阶](notes/10.3%20跳台阶.md) |
| 100 | +- [10.4 变态跳台阶](notes/10.4%20变态跳台阶.md) |
| 101 | +- [42. 连续子数组的最大和](notes/42.%20连续子数组的最大和.md) |
| 102 | +- [47. 礼物的最大价值](notes/47.%20礼物的最大价值.md) |
| 103 | +- [48. 最长不含重复字符的子字符串](notes/48.%20最长不含重复字符的子字符串.md) |
| 104 | +- [49. 丑数](notes/49.%20丑数.md) |
73 | 105 | - [63. 股票的最大利润](notes/63.%20股票的最大利润.md)
|
74 |
| -- [64. 求 1+2+3+...+n](notes/64.%20求%201+2+3+...+n.md) |
75 |
| -- [65. 不用加减乘除做加法](notes/65.%20不用加减乘除做加法.md) |
76 | 106 | - [66. 构建乘积数组](notes/66.%20构建乘积数组.md)
|
77 |
| -- [67. 把字符串转换成整数](notes/67.%20把字符串转换成整数.md) |
78 |
| -- [68. 树中两个节点的最低公共祖先](notes/68.%20树中两个节点的最低公共祖先.md) |
79 | 107 |
|
| 108 | +# 数学 |
80 | 109 |
|
81 |
| -# 参考文献 |
| 110 | +- [39. 数组中出现次数超过一半的数字](notes/39.%20数组中出现次数超过一半的数字.md) |
| 111 | +- [62. 圆圈中最后剩下的数](notes/62.%20圆圈中最后剩下的数.md) |
| 112 | + |
| 113 | +# 位运算 |
| 114 | + |
| 115 | +- [15. 二进制中 1 的个数](notes/15.%20二进制中%201%20的个数.md) |
| 116 | +- [43. 从 1 到 n 整数中 1 出现的次数](notes/43.%20从%201%20到%20n%20整数中%201%20出现的次数.md) |
| 117 | +- [56. 数组中只出现一次的数字](notes/56.%20数组中只出现一次的数字.md) |
| 118 | + |
| 119 | +# 其它 |
82 | 120 |
|
83 |
| -何海涛. 剑指 Offer[M]. 电子工业出版社, 2012. |
| 121 | +- [17. 打印从 1 到最大的 n 位数](notes/17.%20打印从%201%20到最大的%20n%20位数.md) |
| 122 | +- [19. 正则表达式匹配](notes/19.%20正则表达式匹配.md) |
| 123 | +- [20. 表示数值的字符串](notes/20.%20表示数值的字符串.md) |
| 124 | +- [44. 数字序列中的某一位数字](notes/44.%20数字序列中的某一位数字.md) |
| 125 | +- [46. 把数字翻译成字符串](notes/46.%20把数字翻译成字符串.md) |
| 126 | +- [64. 求 1+2+3+...+n](notes/64.%20求%201+2+3+...+n.md) |
| 127 | +- [65. 不用加减乘除做加法](notes/65.%20不用加减乘除做加法.md) |
| 128 | +- [67. 把字符串转换成整数](notes/67.%20把字符串转换成整数.md) |
84 | 129 |
|
85 | 130 |
|
86 | 131 |
|
|
0 commit comments