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