auto commit

This commit is contained in:
CyC2018 2020-11-03 01:05:19 +08:00
parent 8f24ffbc0d
commit c42ead5714
4 changed files with 394 additions and 220 deletions

View File

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

View File

@ -1,86 +1,131 @@
# 目录
# 前言
题目来自何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.刷题网站推荐
- [牛客网](notes/https://www.nowcoder.com/ta/coding-interviews?from=cyc_github)
- [Leetcode](notes/https://leetcode-cn.com/problemset/lcof/)
#
- [3. 数组中重复的数字](notes/3.%20数组中重复的数字.md)
- [4. 二维数组中的查找](notes/4.%20二维数组中的查找.md)
- [5. 替换空格](notes/5.%20替换空格.md)
- [6. 从尾到头打印链表](notes/6.%20从尾到头打印链表.md)
- [7. 重建二叉树](notes/7.%20重建二叉树.md)
- [8. 二叉树的下一个结点](notes/8.%20二叉树的下一个结点.md)
- [9. 用两个栈实现队列](notes/9.%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)
- [11. 旋转数组的最小数字](notes/11.%20旋转数组的最小数字.md)
- [12. 矩阵中的路径](notes/12.%20矩阵中的路径.md)
- [13. 机器人的运动范围](notes/13.%20机器人的运动范围.md)
- [14. 剪绳子](notes/14.%20剪绳子.md)
- [15. 二进制中 1 的个数](notes/15.%20二进制中%201%20的个数.md)
- [16. 数值的整数次方](notes/16.%20数值的整数次方.md)
- [17. 打印从 1 到最大的 n 位数](notes/17.%20打印从%201%20到最大的%20n%20位数.md)
- [18.1 O(1) 时间内删除链表节点](notes/18.1%20在%20O(1)%20时间内删除链表节点.md)
- [18.2 删除链表中重复的结点](notes/18.2%20删除链表中重复的结点.md)
- [19. 正则表达式匹配](notes/19.%20正则表达式匹配.md)
- [20. 表示数值的字符串](notes/20.%20表示数值的字符串.md)
- [21. 调整数组顺序使奇数位于偶数前面](notes/21.%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)
- [26. 树的子结构](notes/26.%20树的子结构.md)
- [27. 二叉树的镜像](notes/27.%20二叉树的镜像.md)
- [28. 对称的二叉树](notes/28.%20对称的二叉树.md)
- [29. 顺时针打印矩阵](notes/29.%20顺时针打印矩阵.md)
- [30. 包含 min 函数的栈](notes/30.%20包含%20min%20函数的栈.md)
- [31. 栈的压入弹出序列](notes/31.%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)
- [35. 复杂链表的复制](notes/35.%20复杂链表的复制.md)
- [36. 二叉搜索树与双向链表](notes/36.%20二叉搜索树与双向链表.md)
- [37. 序列化二叉树](notes/37.%20序列化二叉树.md)
- [38. 字符串的排列](notes/38.%20字符串的排列.md)
- [39. 数组中出现次数超过一半的数字](notes/39.%20数组中出现次数超过一半的数字.md)
- [40. 最小的 K 个数](notes/40.%20最小的%20K%20个数.md)
- [41.1 数据流中的中位数](notes/41.1%20数据流中的中位数.md)
- [41.2 字符流中第一个不重复的字符](notes/41.2%20字符流中第一个不重复的字符.md)
- [42. 连续子数组的最大和](notes/42.%20连续子数组的最大和.md)
- [43. 1 n 整数中 1 出现的次数](notes/43.%20从%201%20到%20n%20整数中%201%20出现的次数.md)
- [44. 数字序列中的某一位数字](notes/44.%20数字序列中的某一位数字.md)
- [45. 把数组排成最小的数](notes/45.%20把数组排成最小的数.md)
- [46. 把数字翻译成字符串](notes/46.%20把数字翻译成字符串.md)
- [47. 礼物的最大价值](notes/47.%20礼物的最大价值.md)
- [48. 最长不含重复字符的子字符串](notes/48.%20最长不含重复字符的子字符串.md)
- [49. 丑数](notes/49.%20丑数.md)
- [50. 第一个只出现一次的字符位置](notes/50.%20第一个只出现一次的字符位置.md)
- [51. 数组中的逆序对](notes/51.%20数组中的逆序对.md)
- [52. 两个链表的第一个公共结点](notes/52.%20两个链表的第一个公共结点.md)
- [53. 数字在排序数组中出现的次数](notes/53.%20数字在排序数组中出现的次数.md)
- [54. 二叉查找树的第 K 个结点](notes/54.%20二叉查找树的第%20K%20个结点.md)
- [55.1 二叉树的深度](notes/55.1%20二叉树的深度.md)
- [55.2 平衡二叉树](notes/55.2%20平衡二叉树.md)
- [56. 数组中只出现一次的数字](notes/56.%20数组中只出现一次的数字.md)
- [68. 树中两个节点的最低公共祖先](notes/68.%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)
# 数组与矩阵
- [3. 数组中重复的数字](notes/3.%20数组中重复的数字.md)
- [4. 二维数组中的查找](notes/4.%20二维数组中的查找.md)
- [5. 替换空格](notes/5.%20替换空格.md)
- [21. 调整数组顺序使奇数位于偶数前面](notes/21.%20调整数组顺序使奇数位于偶数前面.md)
- [29. 顺时针打印矩阵](notes/29.%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)
# HashMap
- [50. 第一个只出现一次的字符位置](notes/50.%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)
- [59. 滑动窗口的最大值](notes/59.%20滑动窗口的最大值.md)
# 贪心思想
- [14. 剪绳子](notes/14.%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)
- [60. n 个骰子的点数](notes/60.%20n%20个骰子的点数.md)
- [61. 扑克牌顺子](notes/61.%20扑克牌顺子.md)
- [62. 圆圈中最后剩下的数](notes/62.%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)
- [48. 最长不含重复字符的子字符串](notes/48.%20最长不含重复字符的子字符串.md)
- [49. 丑数](notes/49.%20丑数.md)
- [63. 股票的最大利润](notes/63.%20股票的最大利润.md)
- [66. 构建乘积数组](notes/66.%20构建乘积数组.md)
# 数学
- [39. 数组中出现次数超过一半的数字](notes/39.%20数组中出现次数超过一半的数字.md)
- [62. 圆圈中最后剩下的数](notes/62.%20圆圈中最后剩下的数.md)
# 位运算
- [15. 二进制中 1 的个数](notes/15.%20二进制中%201%20的个数.md)
- [43. 1 n 整数中 1 出现的次数](notes/43.%20从%201%20到%20n%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)
- [64. 1+2+3+...+n](notes/64.%20求%201+2+3+...+n.md)
- [65. 不用加减乘除做加法](notes/65.%20不用加减乘除做加法.md)
- [66. 构建乘积数组](notes/66.%20构建乘积数组.md)
- [67. 把字符串转换成整数](notes/67.%20把字符串转换成整数.md)
- [68. 树中两个节点的最低公共祖先](notes/68.%20树中两个节点的最低公共祖先.md)
# 参考文献
何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.

View File

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

View File

@ -1,86 +1,131 @@
# 目录
# 前言
题目来自何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.刷题网站推荐
- [牛客网](notes/https://www.nowcoder.com/ta/coding-interviews?from=cyc_github)
- [Leetcode](notes/https://leetcode-cn.com/problemset/lcof/)
#
- [3. 数组中重复的数字](notes/3.%20数组中重复的数字.md)
- [4. 二维数组中的查找](notes/4.%20二维数组中的查找.md)
- [5. 替换空格](notes/5.%20替换空格.md)
- [6. 从尾到头打印链表](notes/6.%20从尾到头打印链表.md)
- [7. 重建二叉树](notes/7.%20重建二叉树.md)
- [8. 二叉树的下一个结点](notes/8.%20二叉树的下一个结点.md)
- [9. 用两个栈实现队列](notes/9.%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)
- [11. 旋转数组的最小数字](notes/11.%20旋转数组的最小数字.md)
- [12. 矩阵中的路径](notes/12.%20矩阵中的路径.md)
- [13. 机器人的运动范围](notes/13.%20机器人的运动范围.md)
- [14. 剪绳子](notes/14.%20剪绳子.md)
- [15. 二进制中 1 的个数](notes/15.%20二进制中%201%20的个数.md)
- [16. 数值的整数次方](notes/16.%20数值的整数次方.md)
- [17. 打印从 1 到最大的 n 位数](notes/17.%20打印从%201%20到最大的%20n%20位数.md)
- [18.1 O(1) 时间内删除链表节点](notes/18.1%20在%20O(1)%20时间内删除链表节点.md)
- [18.2 删除链表中重复的结点](notes/18.2%20删除链表中重复的结点.md)
- [19. 正则表达式匹配](notes/19.%20正则表达式匹配.md)
- [20. 表示数值的字符串](notes/20.%20表示数值的字符串.md)
- [21. 调整数组顺序使奇数位于偶数前面](notes/21.%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)
- [26. 树的子结构](notes/26.%20树的子结构.md)
- [27. 二叉树的镜像](notes/27.%20二叉树的镜像.md)
- [28. 对称的二叉树](notes/28.%20对称的二叉树.md)
- [29. 顺时针打印矩阵](notes/29.%20顺时针打印矩阵.md)
- [30. 包含 min 函数的栈](notes/30.%20包含%20min%20函数的栈.md)
- [31. 栈的压入弹出序列](notes/31.%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)
- [35. 复杂链表的复制](notes/35.%20复杂链表的复制.md)
- [36. 二叉搜索树与双向链表](notes/36.%20二叉搜索树与双向链表.md)
- [37. 序列化二叉树](notes/37.%20序列化二叉树.md)
- [38. 字符串的排列](notes/38.%20字符串的排列.md)
- [39. 数组中出现次数超过一半的数字](notes/39.%20数组中出现次数超过一半的数字.md)
- [40. 最小的 K 个数](notes/40.%20最小的%20K%20个数.md)
- [41.1 数据流中的中位数](notes/41.1%20数据流中的中位数.md)
- [41.2 字符流中第一个不重复的字符](notes/41.2%20字符流中第一个不重复的字符.md)
- [42. 连续子数组的最大和](notes/42.%20连续子数组的最大和.md)
- [43. 1 n 整数中 1 出现的次数](notes/43.%20从%201%20到%20n%20整数中%201%20出现的次数.md)
- [44. 数字序列中的某一位数字](notes/44.%20数字序列中的某一位数字.md)
- [45. 把数组排成最小的数](notes/45.%20把数组排成最小的数.md)
- [46. 把数字翻译成字符串](notes/46.%20把数字翻译成字符串.md)
- [47. 礼物的最大价值](notes/47.%20礼物的最大价值.md)
- [48. 最长不含重复字符的子字符串](notes/48.%20最长不含重复字符的子字符串.md)
- [49. 丑数](notes/49.%20丑数.md)
- [50. 第一个只出现一次的字符位置](notes/50.%20第一个只出现一次的字符位置.md)
- [51. 数组中的逆序对](notes/51.%20数组中的逆序对.md)
- [52. 两个链表的第一个公共结点](notes/52.%20两个链表的第一个公共结点.md)
- [53. 数字在排序数组中出现的次数](notes/53.%20数字在排序数组中出现的次数.md)
- [54. 二叉查找树的第 K 个结点](notes/54.%20二叉查找树的第%20K%20个结点.md)
- [55.1 二叉树的深度](notes/55.1%20二叉树的深度.md)
- [55.2 平衡二叉树](notes/55.2%20平衡二叉树.md)
- [56. 数组中只出现一次的数字](notes/56.%20数组中只出现一次的数字.md)
- [68. 树中两个节点的最低公共祖先](notes/68.%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)
# 数组与矩阵
- [3. 数组中重复的数字](notes/3.%20数组中重复的数字.md)
- [4. 二维数组中的查找](notes/4.%20二维数组中的查找.md)
- [5. 替换空格](notes/5.%20替换空格.md)
- [21. 调整数组顺序使奇数位于偶数前面](notes/21.%20调整数组顺序使奇数位于偶数前面.md)
- [29. 顺时针打印矩阵](notes/29.%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)
# HashMap
- [50. 第一个只出现一次的字符位置](notes/50.%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)
- [59. 滑动窗口的最大值](notes/59.%20滑动窗口的最大值.md)
# 贪心思想
- [14. 剪绳子](notes/14.%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)
- [60. n 个骰子的点数](notes/60.%20n%20个骰子的点数.md)
- [61. 扑克牌顺子](notes/61.%20扑克牌顺子.md)
- [62. 圆圈中最后剩下的数](notes/62.%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)
- [48. 最长不含重复字符的子字符串](notes/48.%20最长不含重复字符的子字符串.md)
- [49. 丑数](notes/49.%20丑数.md)
- [63. 股票的最大利润](notes/63.%20股票的最大利润.md)
- [66. 构建乘积数组](notes/66.%20构建乘积数组.md)
# 数学
- [39. 数组中出现次数超过一半的数字](notes/39.%20数组中出现次数超过一半的数字.md)
- [62. 圆圈中最后剩下的数](notes/62.%20圆圈中最后剩下的数.md)
# 位运算
- [15. 二进制中 1 的个数](notes/15.%20二进制中%201%20的个数.md)
- [43. 1 n 整数中 1 出现的次数](notes/43.%20从%201%20到%20n%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)
- [64. 1+2+3+...+n](notes/64.%20求%201+2+3+...+n.md)
- [65. 不用加减乘除做加法](notes/65.%20不用加减乘除做加法.md)
- [66. 构建乘积数组](notes/66.%20构建乘积数组.md)
- [67. 把字符串转换成整数](notes/67.%20把字符串转换成整数.md)
- [68. 树中两个节点的最低公共祖先](notes/68.%20树中两个节点的最低公共祖先.md)
# 参考文献
何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.