Latest commit

History

History
166 lines (143 loc) · 10.5 KB

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.二叉树的下一个节点
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

History
166 lines (143 loc) · 10.5 KB

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.二叉树的下一个节点
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
166 lines (143 loc) · 10.5 KB

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.二叉树的下一个节点
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
166 lines (143 loc) · 10.5 KB

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.二叉树的下一个节点
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

History
166 lines (143 loc) · 10.5 KB

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.二叉树的下一个节点
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
166 lines (143 loc) · 10.5 KB

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.二叉树的下一个节点
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
166 lines (143 loc) · 10.5 KB

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.二叉树的下一个节点
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

History
166 lines (143 loc) · 10.5 KB

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.二叉树的下一个节点