Skip to content

Latest commit

 

History

History
166 lines (143 loc) · 10.5 KB

README.md

File metadata and controls

166 lines (143 loc) · 10.5 KB

Introduction

本书主要记录了一些我在刷leetcode过程中碰到的一些个人认为比较经典题目的思路和题解。

之前在刷leetcode的过程中,发现很多题目做过就忘掉了,再次碰到类似的甚至是相同的题目是依然感觉无从下手。其实这往往是因为对于题目没有理解,掌握透。因此在之后的刷题过程中,刻意放慢了脚步,每做完一道题,都去主动思考这种算法的时空复杂度是多少,是否还有更优的解法,能否做到举一反三等。

章节的编排形式参考了leetcode的题型分类,例如二叉树,字符串以及链表等。题目以middle难度居多,同时含有少量的easy题以及极少量的hard题。题目没有特定的顺序,纯粹按照了自己的做题顺序来编排。最后一章主要是《剑指offer》上的题目,其中有一部分题目是与之前章节重合的。

目前只有Java语言的实现,后续考虑会加入Javascript以及Go语言的实现。但是鉴于个人有限的精力和时间,也可能不会实施......

如果有任何问题和意见欢迎在Issue区提出。

Author

PythonYXY

Content

  • Introduction

  • 二分查找

    • [287. 寻找重复数](二分查找/287. 寻找重复数.md)
    • [154. 寻找旋转排序数组中的最小值 II](二分查找/154. 寻找旋转排序数组中的最小值 II.md)
    • [300. 最长上升子序列](二分查找/300. 最长上升子序列.md)
    • [69. X的平方根](二分查找/69. X的平方根.md)
    • [354. 俄罗斯套娃信封问题](二分查找/354. 俄罗斯套娃信封问题.md)
    • [153. 寻找旋转排序数组中的最小值](二分查找/153. 寻找旋转排序数组中的最小值.md)
  • 线性表

    • [560. 和为K的子数组](线性表/560. 和为K的子数组.md)
    • [15. 三数之和](线性表/15. 三数之和.md)
    • [523 连续子数组和](线性表/523 连续子数组和.md)
    • [215. 数组中的第K个最大元素](线性表/215. 数组中的第K个最大元素.md)
    • [209. 长度最小的子数组](线性表/209. 长度最小的子数组.md)
    • [4. 寻找两个有序数组的中位数](线性表/4. 寻找两个有序数组的中位数.md)
    • [41. 缺失的第一个正数](线性表/41. 缺失的第一个正数.md)
  • 链表

    • [430. 扁平化多级双向链表](链表/430. 扁平化多级双向链表.md)
    • [138. 复制带随机指针的链表](链表/138. 复制带随机指针的链表.md)
    • [142. 环形链表 II](链表/142. 环形链表 II.md)
    • [460. LFU缓存](链表/460. LFU缓存.md)
    • [86. 分隔链表](链表/86. 分隔链表.md)
    • [109. 有序链表转换二叉搜索树](链表/109. 有序链表转换二叉搜索树.md)
    • [206. 反转链表](链表/206. 反转链表.md)
    • [25. K 个一组翻转链表难度困难](链表/25. K 个一组翻转链表难度困难.md)
    • [92. 反转链表 II](链表/92. 反转链表 II.md)
    • [23. 合并K个排序链表](链表/23. 合并K个排序链表.md)
    • [143. 重排链表](链表/143. 重排链表.md)
  • 二叉树

    • [145. 二叉树的后序遍历](二叉树/145. 二叉树的后序遍历.md)
    • [307. 区域和检索 - 数组可修改](二叉树/307. 区域和检索 - 数组可修改.md)
    • [173. 二叉搜索树迭代器](二叉树/173. 二叉搜索树迭代器.md)
    • [230. 二叉搜索树中第K小的元素](二叉树/230. 二叉搜索树中第K小的元素.md)
    • [95. 不同的二叉搜索树 II](二叉树/95. 不同的二叉搜索树 II.md)
    • [110. 平衡二叉树](二叉树/110. 平衡二叉树.md)
    • [114. 二叉树展开为链表](二叉树/114. 二叉树展开为链表.md)
    • [99. 恢复二叉搜索树](二叉树/99. 恢复二叉搜索树.md)
    • [113. 路径总和 II](二叉树/113. 路径总和 II.md)
    • [96. 不同的二叉搜索树](二叉树/96. 不同的二叉搜索树.md)
    • [129. 求根到叶子节点数字之和](二叉树/129. 求根到叶子节点数字之和.md)
    • [144. 二叉树的前序遍历](二叉树/144. 二叉树的前序遍历.md)
    • [117. 填充每个节点的下一个右侧节点指针 II](二叉树/117. 填充每个节点的下一个右侧节点指针 II.md)
    • [236. 二叉树的最近公共祖先](二叉树/236. 二叉树的最近公共祖先.md)
  • 搜索

    • [240. 搜索二维矩阵 II](搜索/240. 搜索二维矩阵 II.md)
    • [127. 单词接龙](搜索/127. 单词接龙.md)
    • [130. 被围绕的区域](搜索/130. 被围绕的区域.md)
  • 字符串

    • [438. 找到字符串中所有字母异位词](字符串/438. 找到字符串中所有字母异位词.md)
    • [76. 最小覆盖子串](字符串/76. 最小覆盖子串.md)
    • [44. 通配符匹配](字符串/44. 通配符匹配.md)
    • [28. 实现 strStr](字符串/28. 实现 strStr.md)
    • [5. 最长回文子串](字符串/5. 最长回文子串.md)
    • [1143. 最长公共子序列](字符串/1143. 最长公共子序列.md)
    • [10. 正则表达式匹配](字符串/10. 正则表达式匹配.md)
    • [522. 最长特殊序列 II](字符串/522. 最长特殊序列 II.md)
    • [796. 旋转字符串](字符串/796. 旋转字符串.md)
    • [459. 重复的子字符串](字符串/459. 重复的子字符串.md)
    • [72. 编辑距离](字符串/72. 编辑距离.md)
    • [3. 无重复字符的最长子串](字符串/3. 无重复字符的最长子串.md)
  • 动态规划

    • [131. 分割回文串](动态规划/131. 分割回文串.md)
    • [97. 交错字符串](动态规划/97. 交错字符串.md)
    • [188. 买卖股票的最佳时机 IV](动态规划/188. 买卖股票的最佳时机 IV.md)
    • [122. 买卖股票的最佳时机 II](动态规划/122. 买卖股票的最佳时机 II.md)
    • [132. 分割回文串 II](动态规划/132. 分割回文串 II.md)
    • [152. 乘积最大子序列](动态规划/152. 乘积最大子序列.md)
    • [87. 扰乱字符串](动态规划/87. 扰乱字符串.md)
    • [714. 买卖股票的最佳时机含手续费](动态规划/714. 买卖股票的最佳时机含手续费.md)
    • [121. 买卖股票的最佳时机](动态规划/121. 买卖股票的最佳时机.md)
    • [85. 最大矩形](动态规划/85. 最大矩形.md)
    • [120. 三角形最小路径和](动态规划/120. 三角形最小路径和.md)
    • [174. 地下城游戏](动态规划/174. 地下城游戏.md)
    • [140. 单词拆分 II](动态规划/140. 单词拆分 II.md)
    • [123. 买卖股票的最佳时机 III](动态规划/123. 买卖股票的最佳时机 III.md)
    • [940. 不同的子序列 II](动态规划/940. 不同的子序列 II.md)
    • [139. 单词拆分](动态规划/139. 单词拆分.md)
    • [309. 最佳买卖股票时机含冷冻期](动态规划/309. 最佳买卖股票时机含冷冻期.md)
    • [91. 解码方法](动态规划/91. 解码方法.md)
    • [115. 不同的子序列](动态规划/115. 不同的子序列.md)
    • [337. 打家劫舍 III](动态规划/337. 打家劫舍 III.md)
  • 数论

    • [264. 丑数 II](数论/264. 丑数 II.md)
    • [347. 前 K 个高频元素](数论/347. 前 K 个高频元素.md)
    • [355. 设计推特](数论/355. 设计推特.md)
    • [166. 分数到小数](数论/166. 分数到小数.md)
    • [373. 查找和最小的K对数字](数论/373. 查找和最小的K对数字.md)
    • [202. 快乐数](数论/202. 快乐数.md)
    • [172. 阶乘后的零](数论/172. 阶乘后的零.md)
    • [313. 超级丑数](数论/313. 超级丑数.md)
    • [292. Nim 游戏](数论/292. Nim 游戏.md)
  • 位运算

    • [89. 格雷编码](位运算/89. 格雷编码.md)
    • [201. 数字范围按位与](位运算/201. 数字范围按位与.md)
    • [52. N皇后 II](位运算/52. N皇后 II.md)
    • [51. N皇后](位运算/51. N皇后.md)
    • [1275. 找出井字棋的获胜者](位运算/1275. 找出井字棋的获胜者.md)
    • [137. 只出现一次的数字 II](位运算/137. 只出现一次的数字 II.md)
    • [187. 重复的DNA序列](位运算/187. 重复的DNA序列.md)
    • [136. 只出现一次的数字](位运算/136. 只出现一次的数字.md)
  • 剑指offer
    • [46. 把数字翻译成字符串](剑指offer/46. 把数字翻译成字符串.md)
    • [28. 对称的二叉树](剑指offer/28. 对称的二叉树.md)
    • 4.二维数组中的查找
    • [L191. 位1的个数](剑指offer/L191. 位1的个数.md)
    • [43. 1~n整数中1出现的次数](剑指offer/43. 1~n整数中1出现的次数.md)
    • [L153. 寻找旋转排序数组中的最小值](剑指offer/L153. 寻找旋转排序数组中的最小值.md)
    • [29. 顺时针打印矩阵](剑指offer/29. 顺时针打印矩阵.md)
    • [45. 把数组排成最小的数](剑指offer/45. 把数组排成最小的数.md)
    • [36. 二叉搜索树与双向链表](剑指offer/36. 二叉搜索树与双向链表.md)
    • [48. 最长不含重复字符的子字符串](剑指offer/48. 最长不含重复字符的子字符串.md)
    • 24.反转链表
    • [35. 复杂链表的复制](剑指offer/35. 复杂链表的复制.md)
    • [30. 包含min函数的栈](剑指offer/30. 包含min函数的栈.md)
    • [26. 树的子结构](剑指offer/26. 树的子结构.md)
    • [32 - II. 从上到下打印二叉树 II](剑指offer/32 - II. 从上到下打印二叉树 II.md)
    • [22. 链表中倒数第k个节点](剑指offer/22. 链表中倒数第k个节点.md)
    • [49. 丑数](剑指offer/49. 丑数.md)
    • [19. 正则表达式匹配](剑指offer/19. 正则表达式匹配.md)
    • [39. 数组中出现次数超过一半的数字](剑指offer/39. 数组中出现次数超过一半的数字.md)
    • 20.表示数值的字符串
    • [14. 剪梯子](剑指offer/14. 剪梯子.md)
    • [L154. 寻找旋转排序数组中的最小值 II](剑指offer/L154. 寻找旋转排序数组中的最小值 II.md)
    • [9. 用两个栈实现队列](剑指offer/9. 用两个栈实现队列.md)
    • [44. 数字序列中某一位的数字](剑指offer/44. 数字序列中某一位的数字.md)
    • [40. 最小的k个数](剑指offer/40. 最小的k个数.md)
    • [3. 数组中的重复数字](剑指offer/3. 数组中的重复数字.md)
    • [L287. 寻找重复数](剑指offer/L287. 寻找重复数.md)
    • [32 - III. 从上到下打印二叉树 III](剑指offer/32 - III. 从上到下打印二叉树 III.md)
    • [31. 栈的压入、弹出序列](剑指offer/31. 栈的压入、弹出序列.md)
    • [15. 二进制中1的个数](剑指offer/15. 二进制中1的个数.md)
    • [33. 二叉搜索树的后序遍历序列](剑指offer/33. 二叉搜索树的后序遍历序列.md)
    • [41. 数据流中的中位数](剑指offer/41. 数据流中的中位数.md)
    • 8.二叉树的下一个节点