# 前言 题目来自《何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.》,刷题网站推荐: - [牛客网](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) # 链表 - [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) # 树 - [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) - [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) - [48. 最长不含重复字符的子字符串](notes/48.%20最长不含重复字符的子字符串.md) - [63. 股票的最大利润](notes/63.%20股票的最大利润.md) # 二分查找 - [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) # 排序 - [21. 调整数组顺序使奇数位于偶数前面](notes/21.%20调整数组顺序使奇数位于偶数前面.md) - [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) - [60. n 个骰子的点数](notes/60.%20n%20个骰子的点数.md) - [66. 构建乘积数组](notes/66.%20构建乘积数组.md) # 数学 - [39. 数组中出现次数超过一半的数字](notes/39.%20数组中出现次数超过一半的数字.md) - [62. 圆圈中最后剩下的数](notes/62.%20圆圈中最后剩下的数.md) - [43. 从 1 到 n 整数中 1 出现的次数](notes/43.%20从%201%20到%20n%20整数中%201%20出现的次数.md) # 位运算 - [15. 二进制中 1 的个数](notes/15.%20二进制中%201%20的个数.md) - [56. 数组中只出现一次的数字](notes/56.%20数组中只出现一次的数字.md) # 其它 - [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) - [61. 扑克牌顺子](notes/61.%20扑克牌顺子.md) - [64. 求 1+2+3+...+n](notes/64.%20求%201+2+3+...+n.md) - [65. 不用加减乘除做加法](notes/65.%20不用加减乘除做加法.md) - [67. 把字符串转换成整数](notes/67.%20把字符串转换成整数.md)