记录leetcode刷题的经验
| 类别 | 顺序 | 题目 | 笔记 | 难度 | 备注 |
|---|---|---|---|---|---|
| 链表 | 0 | LC203 移除链表元素 | Note | Easy | 链表:听说用虚拟头节点会方便很多? |
| 1 | 02.01.移除重复节点 | Note | Easy | 程序员面试金典 | |
| 2 | LC707 设计链表 | Note | Medium | 链表:一道题目考察了常见的五个操作! | |
| 3 | LC206 反转链表 | Note | Easy | 链表:听说过两天反转链表又写不出来了? | 双指针 | |
| 4 | 02.06. 回文链表 | Note | Easy | 234.回文链表 | 程序员面试金典 | 双快慢指针 | 数组 | |
| 5 | LC24 两两交换链表中的节点 | Note | Medium | 链表:两两交换链表中的节点 | 双指针 | |
| 6 | LC19 删除链表的倒数第N个结点 | Note | Medium | 链表:删除链表的倒数第 N 个结点 | 双快慢指针 | |
| 7 | 02.07. 链表相交 | Note | Easy | 链表:链表相交 | 双快慢指针 | |
| 8 | LC142 环形链表 II | Note | Medium | 链表:环找到了,那入口呢? | 双快慢指针 | |
| 9 | 02.03. 删除中间节点 | Note | Easy | 程序员面试金典 | |
| 10 | 02.04. 分割链表 | Note | Medium | 程序员面试金典 | |
| 11 | 02.05. 链表求和 | Note | Medium | 程序员面试金典 | |
| 12 | LC143 重排链表 | Note | Medium | 143.重排链表 | 双快慢指针 | 数组 | 双向队列 | TODO:学完队列之后再做一遍 | |
| 13 | LC21 合并两个有序链表 | Note | Easy | 剑指Offer25 | |
| 14 | LC138 复制带随机指针的链表 | Note | Medium | 剑指Offer35 | TODO:学完回溯算法之后再做一遍 | |
| 15 | 06. 从尾到头打印链表 | Note | Easy | 剑指Offer | 双指针 | TODO:学完栈之后再做一遍 | |
| 16 | 02.02. 返回倒数第 k 个节点 | Note | Easy | 双快慢指针 | |
| 17 | LC445 两数相加 II | Note | Medium | 剑指OfferII 025 | 双指针 | 字符串 | 栈 | |
| 18 | 029. 排序的循环链表 | Note | Medium | 剑指OfferII | |
| 19 | LC148 排序链表 | Note | Medium | 剑指OfferII 077 | 八大排序(归并) | TODO:学完归并排序再做一遍 | |
| 20 | LC146 LRU 缓存机制 | Note | Medium | 剑指OfferII 031 | 哈希表 | 源码分析:LinkedHashMap |
|
| 21 | LC23 合并K个升序链表 | Note | Hard | 剑指OfferII 078 | 归并排序 | 堆(优先队列) | |
| 数组 | 0 | LC704 二分查找 | Note | Easy | 数组:每次遇到二分法,都是一看就会,一写就废 | 二分查找 |
| 1 | LC27 移除元素 | Note | Easy | 数组:就移除个元素很难么? | 双快慢指针 | |
| 2 | LC977 有序数组的平方 | Note | Easy | 数组:有序数组的平方,还有序么? | 双指针 | |
| 3 | LC209 长度最小的子数组 | Note | Medium | 数组:滑动窗口拯救了你 | 滑动窗口 | |
| 4 | 10.05. 稀疏数组搜索 | Note | Easy | 程序员面试金典 | 二分查找 | |
| 5 | LC59 螺旋矩阵II | Note | Medium | 数组:这个循环可以转懵很多人! | |
| 6 | 08.03. 魔术索引 | Note | Easy | 程序员面试金典 | 二分查找 | 分治法 | |
| 7 | LC35 搜索插入位置 | Note | Easy | 剑指offerII 068 | 二分查找 | |
| 8 | LC1365 有多少小于当前数字的数字 | Note | Easy | 1365.有多少小于当前数字的数字 | 快速排序 | 哈希表 | |
| 9 | LC941 有效的山脉数组 | Note | Easy | 941.有效的山脉数组 | 双指针 | |
| 10 | LC283 移动零 | Note | Easy | 283.移动零 | 双快慢指针 | |
| 11 | LC189 旋转数组 | Note | Medium | 189.旋转数组 | 字符串反转 | |
| 12 | LC724 寻找数组的中心下标 | Note | Easy | 724.寻找数组的中心索引 | 剑指offerII 012 | |
| 13 | LC34 在排序数组中查找元素的第一个和最后一个位置 | Note | Medium | 34.在排序数组中查找元素的第一个和最后一个位置 | 二分查找 | |
| 14 | LC922 按奇偶排序数组II | Note | Easy | 922.按奇偶排序数组II | 双快慢指针 | |
| 15 | LC1207 独一无二的出现次数 | Note | Easy | 1207.独一无二的出现次数 | 哈希表 | |
| 16 | 03. 数组中重复的数字 | Note | Easy | 哈希表 / 原地交换,清晰图解 | 剑指offer | 哈希表 | |
| 17 | 01.08. 零矩阵 | Note | Medium | 程序员面试金典 | 哈希表 | |
| 18 | 16.06. 最小差 | Note | Medium | 程序员面试金典 | 双指针 | |
| 19 | LC48 旋转图像 | Note | Medium | 程序员面试金典01.07 | |
| 20 | 10.03. 搜索旋转数组 | Note | Medium | 程序员面试金典 | 剑指offer11 | LC154 | 二分查找 | |
| 21 | 16.10. 生存人数 | Note | Medium | 程序员面试金典 | 哈希表 | 排序 | |
| 22 | LC240 搜索二维矩阵 II | Note | Medium | 剑指Offer04 | 程序员面试金典10.09 | 二分查找 | TODO:学完树再做一遍 | |
| 23 | LC54 螺旋矩阵 | Note | Medium | 剑指Offer29 | |
| 24 | 21. 调整数组顺序使奇数位于偶数前面 | Note | Easy | 剑指Offer | 双快慢指针 | |
| 25 | 56 - I. 数组中数字出现的次数 | Note | Medium | 剑指Offer | 哈希表 | 位运算(异或) | |
| 26 | 17. 打印从1到最大的n位数 | Note | Easy | 剑指Offer | 大数问题 | 递归 | 打印从1到最大的n位数,普通解法 + 大数全排列解法 | TODO:学完深度优先搜索再看一遍 | |
| 27 | 57. 和为s的两个数字 | Note | Easy | 剑指Offer | 双指针 | |
| 28 | 66. 构建乘积数组 | Note | Medium | 剑指Offer | 前缀和 | |
| 29 | 61. 扑克牌中的顺子 | Note | Easy | 剑指Offer | 哈希表 | 排序 | |
| 30 | 05.08. 绘制直线 | Note | Medium | 程序员面试金典 | 位运算 | |
| 31 | 10.01. 合并排序的数组 | Note | Easy | 程序员面试金典 | 双指针 | |
| 32 | 17.19. 消失的两个数字 | Note | Hard | 程序员面试金典 | 哈希表 | 位运算(异或) | |
| 33 | 56 - II. 数组中数字出现的次数 II | Note | Medium | 剑指offer | 哈希表 | 位运算 | |
| 34 | 16.11. 跳水板 | Note | Easy | 程序员面试金典 | |
| 35 | 17.26. 稀疏相似度 | Note | Hard | 程序员面试金典 | 哈希表 | |
| 36 | LC167 两数之和 II - 输入有序数组 | Note | Easy | 剑指OfferII 006 | 双指针 | 二分查找 | |
| 37 | LC713 乘积小于K的子数组 | Note | Medium | 剑指OfferII 009 | 滑动窗口 | |
| 38 | LC304 二维区域和检索 - 矩阵不可变 | Note | Medium | 剑指OfferII 013 | 前缀和 | |
| 39 | LC852 山脉数组的峰顶索引 | Note | Easy | 剑指OfferII 069 | 双指针 | 二分查找 | |
| 40 | LC540 有序数组中的单一元素 | Note | Medium | 剑指OfferII 070 | 位运算(异或) | 二分查找 | |
| 41 | LC528 按权重随机选择 | Note | Medium | 剑指OfferII 071 | 二分查找 | 前缀和 | |
| 42 | LC56 合并区间 | Note | Medium | 剑指OfferII 074 | 定制排序 | |
| 43 | 16.04. 井字游戏 | Note | Medium | 程序员面试金典 | |
| 44 | 57 - II. 和为s的连续正数序列 | Note | Easy | 剑指offer | 滑动窗口 | |
| 45 | LC875 爱吃香蕉的珂珂 | Note | Medium | 剑指OfferII 073 | 二分查找 | |
| 哈希表 | 0 | LC242 有效的字母异位词 | Note | Easy | 哈希表:可以拿数组当哈希表来用,但哈希值不要太大 | 剑指OfferII 032 |
| 1 | LC1002 查找共用字符 | Note | Easy | 哈希表:查找常用字符 | |
| 2 | LC349 两个数组的交集 | Note | Easy | 哈希表:哈希值太大了,还是得用set | |
| 3 | LC202 快乐数 | Note | Easy | 哈希表:用set来判断快乐数 | 递归 | 双快慢指针 | |
| 4 | LC1 两数之和 | Note | Easy | 哈希表:map等候多时了 | |
| 5 | LC454 四数相加 II | Note | Medium | 哈希表:其实需要哈希的地方都能找到map的身影 | |
| 6 | LC383 赎金信 | Note | Easy | 哈希表:这道题目我做过? | |
| 7 | LC15 三数之和 | Note | Medium | 哈希表:解决了两数之和,那么能解决三数之和么? | 双指针 | |
| 8 | LC18 四数之和 | Note | Medium | 双指针法:一样的道理,能解决四数之和 | 双指针 | |
| 9 | LC205 同构字符串 | Note | Easy | 205.同构字符串 | |
| 10 | 17.04. 消失的数字 | Note | Easy | 程序员面试金典 | 位运算(异或) | |
| 11 | 16.24. 数对和 | Note | Medium | 程序员面试金典 | 双指针 | |
| 12 | 16.21. 交换和 | Note | Medium | 程序员面试金典 | 双指针 | |
| 13 | 01.01. 判定字符是否唯一 | Note | Easy | 程序员面试金典 | 位运算 | |
| 14 | 01.04. 回文排列 | Note | Easy | 程序员面试金典 | 位运算(异或) | |
| 15 | 16.15. 珠玑妙算 | Note | Easy | 程序员面试金典 | |
| 16 | LC169 多数元素 | Note | Easy | 剑指Offer39 | Boyer-Moore 投票算法 | |
| 17 | 50. 第一个只出现一次的字符 | Note | Easy | 剑指offer | 队列 | TODO:学完队列之后再做一遍 | |
| 18 | LC560 和为 K 的子数组 | Note | Medium | 剑指OfferII 010 | 前缀和 | |
| 19 | 16.02. 单词频率 | Note | Medium | 程序员面试金典 | 字典树 | TODO:学完树之后再做一遍 | |
| 20 | LC318 最大单词长度乘积 | Note | Medium | 剑指OfferII 005 | 位运算 | |
| 21 | 17.05. 字母与数字 | Note | Medium | 程序员面试金典 | 前缀和 | |
| 22 | LC525 连续数组 | Note | Medium | 剑指OfferII 011 | 前缀和 | |
| 23 | LC128 最长连续序列 | Note | Medium | 剑指OfferII 119 | |
| 24 | LC1122 数组的相对排序 | Note | Easy | 剑指OfferII 075 | 定制排序 | 计数排序 | |
| 25 | LC380 O(1) 时间插入、删除和获取随机元素 | Note | Medium | 剑指OfferII 030 | |
| 26 | LC953 验证外星语词典 | Note | Easy | 剑指OfferII 034 | |
| 27 | 16.20. T9键盘 | Note | Medium | 程序员面试金典 | |
| 28 | 16.22. 兰顿蚂蚁 | Note | Medium | 程序员面试金典 | 重写equals和hashCode |
|
| 29 | 17.18. 最短超串 | Note | Medium | 程序员面试金典 | 滑动窗口 | |
| 字符串 | 0 | LC344 反转字符串 | Note | Easy | 字符串:这道题目,使用库函数一行代码搞定 | 双指针 | 使用异或完成两数交换 |
| 1 | LC541 反转字符串 II | Note | Easy | 字符串:简单的反转还不够! | |
| 2 | 05. 替换空格 | Note | Easy | 字符串:替换空格 | 剑指offer | 双指针 | |
| 3 | LC151 翻转字符串里的单词 | Note | Medium | 字符串:花式反转还不够! | 剑指offer58-I | 双向队列 | TODO:学完队列之后再做一遍 | |
| 4 | 58 - II. 左旋转字符串 | Note | Easy | 字符串:反转个字符串还有这个用处? | 剑指offer | |
| 5 | 01.03. URL化 | Note | Easy | 程序员面试金典 | 双指针 | |
| 6 | LC28 实现 strStr() | Note | Easy | 帮你把KMP算法学个通透 | KMP算法 | |
| 7 | LC459 重复的子字符串 | Note | Easy | 字符串:KMP算法还能干这个! | KMP算法 | |
| 8 | 01.06. 字符串压缩 | Note | Easy | 程序员面试金典 | |
| 9 | 01.09. 字符串轮转 | Note | Easy | 程序员面试金典 | KMP算法 | |
| 10 | 05.02. 二进制数转字符串 | Note | Medium | 程序员面试金典 | 位运算 | |
| 11 | 10.02. 变位词组 | Note | Medium | 程序员面试金典 | 剑指OfferII 033 | LC49 | 哈希表 | 排序 | |
| 12 | 01.05. 一次编辑 | Note | Medium | 程序员面试金典 | 双指针 | |
| 13 | 17.11. 单词距离 | Note | Medium | 程序员面试金典 | 哈希表 | 双指针 | 双快慢指针 | |
| 14 | LC3 无重复字符的最长子串 | Note | Medium | 剑指Offer48 | 滑动窗口 | 哈希表 | |
| 15 | LC8 字符串转换整数 (atoi) | Note | Medium | 剑指Offer67 | TODO:学完Java正则表达式再做一遍 | |
| 16 | LC567 字符串的排列 | Note | Medium | 剑指OfferII 014 | 滑动窗口 | 哈希表 | |
| 17 | LC438 找到字符串中所有字母异位词 | Note | Medium | 剑指OfferII 015 | 滑动窗口 | 哈希表 | |
| 18 | LC539 最小时间差 | Note | Medium | 剑指OfferII 035 | |
| 19 | LC67 二进制求和 | Note | Easy | 剑指OfferII 002 | |
| 20 | LC76 最小覆盖子串 | Note | Hard | 剑指OfferII 017 | 滑动窗口 | 哈希表 | |
| 21 | LC125 验证回文串 | Note | Easy | 剑指OfferII 018 | 双指针 | |
| 22 | LC273 整数转换英文表示 | Note | Hard | 程序员面试金典16.08 | 递归 | |
| 栈与队列 | 0 | LC232 用栈实现队列 | Note | Easy | 栈与队列:我用栈来实现队列怎么样? |
| 1 | LC225 用队列实现栈 | Note | Easy | 栈与队列:用队列实现栈还有点别扭 | |
| 2 | LC20 有效的括号 | Note | Easy | 栈与队列:系统中处处都是栈的应用 | |
| 3 | LC1047 删除字符串中的所有相邻重复项 | Note | Easy | 栈与队列:匹配问题都是栈的强项 | 字符串 | 双指针 | |
| 4 | LC150 逆波兰表达式求值 | Note | Medium | 栈与队列:有没有想过计算机是如何处理表达式的? | 逆波兰表达式 | |
| 5 | LC239 滑动窗口最大值 | Note | Hard | 栈与队列:滑动窗口里求最大值引出一个重要数据结构 | 单调队列 | TODO:学完堆排序后再做一遍 | |
| 6 | 03.02. 栈的最小值 | Note | Easy | 程序员面试金典 | |
| 7 | 03.01. 三合一 | Note | Easy | 程序员面试金典 | |
| 8 | 16.26. 计算器 | Note | Medium | 程序员面试金典 | 逆波兰表达式 | |
| 9 | 03.05. 栈排序 | Note | Medium | 程序员面试金典 | 惰性更新 | |
| 10 | LC946 验证栈序列 | Note | Medium | 剑指offer31 | |
| 11 | 03.06. 动物收容所 | Note | Easy | 程序员面试金典 | |
| 12 | LC735 行星碰撞 | Note | Medium | 剑指offerII 037 | |
| 13 | LC739 每日温度 | Note | Medium | 剑指offerII 038 | 单调栈 | |
| 14 | LC84 柱状图中最大的矩形 | Note | Hard | 剑指offerII 039 | 单调栈 | |
| 15 | 17.21. 直方图的水量 | Note | Hard | 程序员面试金典 | 单调栈 | TODO:学完动态规划再做一遍 | |
| 16 | 041. 滑动窗口的平均值 | Note | Easy | 剑指offerII | |
| 17 | LC933 最近的请求次数 | Note | Easy | 剑指offerII 042 | |
| 18 | 03.03. 堆盘子 | Note | Medium | 程序员面试金典 | |
| 19 | 16.16. 部分排序 | Note | Medium | 程序员面试金典 | 单调栈 | |
| 20 | 59 - II. 队列的最大值 | Note | Medium | 剑指offer | 单调队列 | |
| 21 | LC347 前 K 个高频元素 | Note | Medium | 栈与队列:求前 K 个高频元素和队列有啥关系? | 剑指OfferII 060 | 哈希表 | 堆(优先级队列) | 源码分析:PriorityQueue |
|
| 22 | 17.14. 最小K个数 | Note | Medium | 程序员面试金典 | 剑指Offer40 | 堆(优先级队列) | 基于快速排序的数组划分 | |
| 23 | 17.20. 连续中值 | Note | Hard | 程序员面试金典 | 剑指Offer41 | LC295 | 堆(优先级队列) | |
| 24 | LC703 数据流中的第 K 大元素 | Note | Easy | 剑指OfferII 059 | 堆(优先级队列) | |
| 25 | LC373 查找和最小的K对数字 | Note | Medium | 剑指OfferII 061 | 堆(优先级队列) | |
| 26 | LC215 数组中的第K个最大元素 | Note | Medium | 剑指OfferII 076 | 堆(优先级队列) | 基于快速排序的数组划分 | |
| 二叉树 | 0 | LC144 二叉树的前序遍历 | Note | Easy | 二叉树:一入递归深似海,从此offer是路人 | 二叉树:听说递归能做的,栈也能做! | 递归 | 栈 | TODO:有时间再去用线索化二叉树(Morris遍历)做一遍 |
| 1 | LC94 二叉树的中序遍历 | Note | Easy | 递归 | 栈 | |
| 2 | LC145 二叉树的后序遍历 | Note | Easy | 递归 | 栈 | |
| 3 | LC102 二叉树的层序遍历 | Note | Medium | 二叉树:层序遍历登场! | 迭代+递归 多图演示 102.二叉树的层次遍历 | 剑指Offer32-I | 剑指Offer32-II | 队列 | 广度优先遍历(层序遍历) | 深度优先遍历(前序遍历) | |
| 4 | LC107 二叉树的层序遍历 II | Note | Medium | 广度优先遍历(层序遍历) | |
| 5 | LC199 二叉树的右视图 | Note | Medium | 剑指OfferII 046 | 广度优先遍历(层序遍历) | |
| 6 | LC637 二叉树的层平均值 | Note | Easy | 广度优先遍历(层序遍历) | |
| 7 | LC429 N 叉树的层序遍历 | Note | Medium | 广度优先遍历(层序遍历) | |
| 8 | LC515 在每个树行中找最大值 | Note | Medium | 剑指OfferII 044 | 广度优先遍历(层序遍历) | |
| 9 | LC116 填充每个节点的下一个右侧节点指针 | Note | Medium | 动画演示+三种实现 116. 填充每个节点的下一个右侧节点指针 | 广度优先遍历(层序遍历) | 深度优先遍历 | |
| 10 | LC117 填充每个节点的下一个右侧节点指针 II | Note | Medium | BFS解决(最好的击败了100%的用户) | 广度优先遍历(层序遍历) | |
| 11 | LC104 二叉树的最大深度 | Note | Easy | 二叉树:看看这些树的最大深度 | 剑指Offer55-I | 广度优先遍历(层序遍历) | 深度优先遍历(后序遍历) | 深度优先遍历(前序遍历) | |
| 12 | LC111 二叉树的最小深度 | Note | Easy | 二叉树:看看这些树的最小深度 | 广度优先遍历(层序遍历) | 深度优先遍历(后序遍历) | |
| 13 | LC226 翻转二叉树 | Note | Easy | 二叉树:你真的会翻转二叉树么? | 剑指Offer27 | 广度优先遍历(层序遍历) | 深度优先遍历(前序遍历) | |
| 14 | LC101 对称二叉树 | Note | Easy | 二叉树:我对称么? | 剑指Offer28 | 递归(深度优先搜索) | 队列(广度优先搜索) | 递归三部曲 | |
| 15 | LC100 相同的树 | Note | Easy | 递归(深度优先搜索) | 队列(广度优先搜索) | |
| 16 | LC572 另一棵树的子树 | Note | Easy | 程序员面试金典04.10 | 剑指Offer26 | 递归(深度优先搜索) | 深度优先遍历(前序遍历) | KMP算法 | |
| 17 | LC559 N 叉树的最大深度 | Note | Easy | 广度优先遍历(层序遍历) | 深度优先遍历(后序遍历) | 深度优先遍历(前序遍历) | |
| 18 | LC222 完全二叉树的节点个数 | Note | Medium | 二叉树:我有多少个节点? | 完全二叉树 | 满二叉树 | |
| 19 | LC110. 平衡二叉树 | Note | Easy | 二叉树:我平衡么? | 程序员面试金典04.04 | 剑指Offer55-II | 平衡二叉树 | 深度优先遍历(后序遍历) | |
| 20 | LC589. N 叉树的前序遍历 | Note | Easy | 递归 | 栈 | |
| 21 | LC590. N 叉树的后序遍历 | Note | Easy | 递归 | 栈 | |
| 22 | LC257 二叉树的所有路径 | Note | Easy | 二叉树:找我的所有路径? | 二叉树:以为使用了递归,其实还隐藏着回溯 | 深度优先遍历(前序遍历) | 回溯 | |
| 23 | LC404 左叶子之和 | Note | Easy | 二叉树:做了这么多题目了,我的左叶子之和是多少? | 广度优先遍历(层序遍历) | 深度优先遍历(前序遍历) | 深度优先遍历(后序遍历) | |
| 24 | LC513 找树左下角的值 | Note | Medium | 二叉树:我的左下角的值是多少? | 剑指OfferII 045 | 广度优先遍历(层序遍历) | 深度优先遍历(前序遍历) | |
| 25 | LC112 路径总和 | Note | Easy | 二叉树:路径总和 | 深度优先遍历(前序遍历) | 广度优先遍历(层序遍历) | 递归方法什么时候需要返回值 | |
| 26 | LC113 路径总和 II | Note | Medium | 剑指Offer34 | 深度优先遍历(前序遍历) | 回溯 | |
| 27 | LC106 从中序与后序遍历序列构造二叉树 | Note | Medium | 二叉树:构造二叉树登场! | 图解构造二叉树之中序+后序 | 分治法 | 哈希表 | |
| 28 | LC105 从前序与中序遍历序列构造二叉树 | Note | Medium | 分治法 | 哈希表 | 剑指Offer07 | |
| 29 | LC654 最大二叉树 | Note | Medium | 二叉树:构造一棵最大的二叉树 | 分治法 | 单调栈 | |
| 30 | LC617 合并二叉树 | Note | Easy | 二叉树:合并两个二叉树 | 深度优先遍历(前序遍历) | 广度优先遍历(层序遍历) | |
| 31 | LC700 二叉搜索树中的搜索 | Note | Easy | 二叉树:二叉搜索树登场! | 二叉搜索树 | |
| 32 | LC98 验证二叉搜索树 | Note | Medium | 二叉树:我是不是一棵二叉搜索树 | 程序员面试金典04.05 | 二叉搜索树 | 深度优先遍历(前序遍历) | 深度优先遍历(中序遍历) | |
| 33 | LC530 二叉搜索树的最小绝对差 | Note | Easy | 二叉树:搜索树的最小绝对差 | 二叉搜索树 | 深度优先遍历(中序遍历) | |
| 34 | LC501 二叉搜索树中的众数 | Note | Easy | 二叉树:我的众数是多少? | 二叉搜索树 | 深度优先遍历(中序遍历) | |
| 35 | LC236 二叉树的最近公共祖先 | Note | Medium | 二叉树:公共祖先问题 | 程序员面试金典04.08 | 剑指Offer68-II | 深度优先遍历(前序遍历) | 深度优先遍历(后序遍历) | 递归方法有返回值时搜索一条边和搜索整棵树的逻辑 | 回溯 | |
| 36 | LC235 二叉搜索树的最近公共祖先 | Note | Easy | 二叉树:搜索树的公共祖先问题 | 剑指Offer68-I | 二叉搜索树 | |
| 37 | LC701 二叉搜索树中的插入操作 | Note | Medium | 二叉树:搜索树中的插入操作 | 二叉搜索树 | |
| 38 | LC450 删除二叉搜索树中的节点 | Note | Medium | 二叉树:搜索树中的删除操作 | 二叉搜索树 | |
| 39 | LC669 修剪二叉搜索树 | Note | Medium | 二叉树:修剪一棵搜索树 | 二叉搜索树 | 深度优先遍历(前序遍历) | |
| 40 | LC108 将有序数组转换为二叉搜索树 | Note | Easy | 二叉树:构造一棵搜索树 | 程序员面试金典04.02 | 二叉搜索树 | 分治法 | |
| 41 | LC538 把二叉搜索树转换为累加树 | Note | Medium | 二叉树:搜索树转成累加树 | 剑指OfferII 054 | 二叉搜索树 | 深度优先遍历(反中序遍历) | |
| 42 | 04.03. 特定深度节点链表 | Note | Medium | 程序员面试金典 | 广度优先遍历(层序遍历) | 深度优先遍历(前序遍历) | |
| 43 | 04.06. 后继者 | Note | Medium | 程序员面试金典 | 深度优先遍历(中序遍历) | |
| 44 | 04.12. 求和路径 | Note | Medium | 程序员面试金典 | 深度优先遍历(前序遍历) | 前缀和 | 哈希表 | 回溯 | |
| 45 | 17.12. BiNode | Note | Easy | 程序员面试金典 | 二叉搜索树 | 深度优先遍历(中序遍历) | 链表 | |
| 46 | LC129 求根节点到叶节点数字之和 | Note | Medium | 129.求根到叶子节点数字之和 | 剑指OfferII 049 | 深度优先遍历(前序遍历) | 广度优先遍历(层序遍历) | 回溯 | |
| 47 | LC1382 将二叉搜索树变平衡 | Note | Medium | 1382.将二叉搜索树变平衡 | 深度优先遍历(中序遍历) | 二叉搜索树 | 分治法 | |
| 48 | 36. 二叉搜索树与双向链表 | Note | Medium | 剑指offer | 二叉搜索树 | 深度优先遍历(中序遍历) | 链表 | |
| 49 | LC297 二叉树的序列化与反序列化 | Note | Hard | 剑指Offer37 | 剑指OfferII 048 | 深度优先遍历(前序遍历) | 广度优先遍历(层序遍历) | 队列 | |
| 50 | 32 - III. 从上到下打印二叉树 III | Note | Medium | 剑指offer | 广度优先遍历(层序遍历) | |
| 51 | LC919 完全二叉树插入器 | Note | Medium | 剑指OfferII 043 | 广度优先遍历(层序遍历) | 完全二叉树 | 数组 | 队列 | |
| 回溯算法 | 0 | LC77 组合 | Note | Medium | 回溯算法:组合问题 | 回溯算法:组合问题再剪剪枝 | 剑指OfferII 080 | 回溯三部曲 |
| 1 | LC216 组合总和 III | Note | Medium | 回溯算法:求组合总和! | |
| 2 | LC17 电话号码的字母组合 | Note | Medium | 回溯算法:电话号码的字母组合 | |
| 3 | LC39 组合总和 | Note | Medium | 回溯算法:求组合总和(二) | 剑指OfferII 081 | 在组合问题中什么时候需要参数来控制for循环起始位置 | |
| 4 | LC40 组合总和 II | Note | Medium | 回溯算法:求组合总和(三) | 剑指OfferII 082 | 树层去重和树枝去重 | |
| 5 | LC131 分割回文串 | Note | Medium | 回溯算法:分割回文串 | TODO:学完动态规划再做一遍 | |
| 6 | LC93 复原 IP 地址 | Note | Medium | 回溯算法:复原IP地址 | 剑指OfferII 087 | 正则表达式 | |
| 7 | LC78 子集 | Note | Medium | 回溯算法:求子集问题! | 程序员面试金典08.04 | 剑指OfferII 079 | |
| 8 | LC90 子集 II | Note | Medium | 回溯算法:求子集问题(二) | 树层去重 | |
| 9 | LC491 递增子序列 | Note | Medium | 回溯算法:递增子序列 | 哈希表 | 树层去重 | |
| 10 | LC46 全排列 | Note | Medium | 回溯算法:排列问题! | 程序员面试金典08.07 | 剑指OfferII 083 | 哈希表 | |
| 11 | LC47 全排列 II | Note | Medium | 回溯算法:排列问题(二) | 程序员面试金典08.08 | 剑指Offer38 | 剑指OfferII 084 | 树层去重 | |
| 12 | LC332 重新安排行程 | Note | Hard | 回溯算法:重新安排行程 | 图论 | 深度优先遍历 | 哈希表 | TreeSet/TreeMap |
|
| 13 | LC51 N 皇后 | Note | Hard | 回溯算法:N皇后问题 | 程序员面试金典08.12 | LC52 | 哈希表 | |
| 14 | LC37 解数独 | Note | Hard | 回溯算法:解数独 | 哈希表 | 位运算 | |
| 15 | 08.09. 括号 | Note | Medium | 程序员面试金典 | 剑指OfferII 085 | LC22 | |
| 16 | LC797 所有可能的路径 | Note | Medium | 剑指OfferII 110 | 图论 | 深度优先遍历 | 广度优先遍历 | |
| 17 | LC79 单词搜索 | Note | Medium | 剑指Offer12 | 深度优先遍历 | 使用偏移量数组来表示四个方向 | |
| 贪心算法 | 0 | LC455 分发饼干 | Note | Easy | 贪心算法:分发饼干 |
| 1 | LC376 摆动序列 | Note | Medium | 贪心算法:摆动序列 | TODO:学完动态规划再做一遍 | |
| 2 | LC53 最大子数组和 | Note | Easy | 贪心算法:最大子序和 | 动态规划:最大子序和 | 剑指Offer42 | 动态规划 | |
| 3 | LC122 买卖股票的最佳时机 II | Note | Medium | 贪心算法:买卖股票的最佳时机II | 动态规划:买卖股票的最佳时机II | 动态规划 | |
| 4 | LC55 跳跃游戏 | Note | Medium | 贪心算法:跳跃游戏 | |
| 5 | LC45 跳跃游戏 II | Note | Medium | 贪心算法:跳跃游戏II | |
| 6 | LC1005 K 次取反后最大化的数组和 | Note | Easy | 贪心算法:K次取反后最大化的数组和 | 定制排序 | 计数排序 | |
| 7 | LC134 加油站 | Note | Medium | 贪心算法:加油站 | |
| 8 | LC135 分发糖果 | Note | Hard | 贪心算法:分发糖果 | |
| 9 | LC860 柠檬水找零 | Note | Easy | 贪心算法:柠檬水找零 | |
| 10 | LC406 根据身高重建队列 | Note | Medium | 贪心算法:根据身高重建队列 | 定制排序 | 链表 | |
| 11 | LC452 用最少数量的箭引爆气球 | Note | Medium | 贪心算法:用最少数量的箭引爆气球 | 定制排序 | 定制排序的越界问题 | |
| 12 | LC435 无重叠区间 | Note | Medium | 贪心算法:无重叠区间 | 定制排序 | |
| 13 | LC763 划分字母区间 | Note | Medium | 贪心算法:划分字母区间 | 哈希表 | |
| 14 | LC738 单调递增的数字 | Note | Medium | 贪心算法:单调递增的数字 | |
| 15 | LC714 买卖股票的最佳时机含手续费 | Note | Medium | 贪心算法:买卖股票的最佳时机含手续费 | 动态规划:买卖股票的最佳时机含手续费 | 动态规划 | |
| 16 | LC968 监控二叉树 | Note | Hard | 贪心算法:我要监控二叉树! | 二叉树 | 深度优先遍历(后序遍历) | TODO:学完动态规划再做一遍 | |
| 17 | LC649 Dota2 参议院 | Note | Medium | 649.Dota2参议院 | 队列 | |
| 18 | LC1221 分割平衡字符串 | Note | Easy | 1221.分割平衡字符 | |
| 19 | 10.11. 峰与谷 | Note | Medium | 程序员面试金典 | |
| 20 | 45. 把数组排成最小的数 | Note | Medium | 剑指offer | 定制排序 | |
| 21 | LC680 验证回文字符串 Ⅱ | Note | Easy | 剑指OfferII 019 | 双指针 | 递归 | |
| 动态规划 | 0 | LC509 斐波那契数 | Note | Easy | 动态规划:斐波那契数 | 剑指Offer10-I | 递归 | 动态规划五部曲 |
| 1 | LC70 爬楼梯 | Note | Easy | 动态规划:爬楼梯 | 动态规划:以前我没得选,现在我选择再爬一次! | 剑指Offer10-II | 完全背包问题(排列数) | |
| 2 | LC746 使用最小花费爬楼梯 | Note | Easy | 动态规划:使用最小花费爬楼梯 | 剑指OfferII 088 | |
| 3 | LC62 不同路径 | Note | Medium | 动态规划:不同路径 | 剑指OfferII 098 | |
| 4 | LC63 不同路径 II | Note | Medium | 动态规划:不同路径还不够,要有障碍! | |
| 5 | LC343 整数拆分 | Note | Medium | 动态规划:整数拆分,你要怎么拆? | |
| 6 | LC96 不同的二叉搜索树 | Note | Medium | 动态规划:不同的二叉搜索树 | 二叉搜索树 | |
| 7 | LC416 分割等和子集 | Note | Medium | 动态规划:关于01背包问题,你该了解这些! | 动态规划:关于01背包问题,你该了解这些!(滚动数组) | 动态规划:分割等和子集可以用01背包! | 01背包问题(价值最大) | 滚动数组优化 | |
| 8 | LC1049 最后一块石头的重量 II | Note | Medium | 动态规划:最后一块石头的重量 II | 01背包问题(价值最大) | |
| 9 | LC494 目标和 | Note | Medium | 动态规划:目标和! | 01背包问题(方法数) | |
| 10 | LC474 一和零 | Note | Medium | 动态规划:一和零! | 01背包问题(价值最大) | |
| 11 | LC518 零钱兑换 II | Note | Medium | 动态规划:关于完全背包,你该了解这些! | 动态规划:给你一些零钱,你要怎么凑? | 完全背包问题(组合数) | |
| 12 | LC377 组合总和 Ⅳ | Note | Medium | 动态规划:Carl称它为排列总和! | 剑指OfferII 104 | 完全背包问题(排列数) | |
| 13 | LC322 零钱兑换 | Note | Medium | 动态规划: 给我个机会,我再兑换一次零钱 | 剑指OfferII 103 | 完全背包问题(价值最大) | |
| 14 | LC279 完全平方数 | Note | Medium | 动态规划:一样的套路,再求一次完全平方数 | 完全背包问题(价值最大) | |
| 15 | LC139 单词拆分 | Note | Medium | 动态规划:单词拆分 | 完全背包问题(能否装满背包) | 哈希表 | |
| 16 | LC198 打家劫舍 | Note | Medium | 动态规划:开始打家劫舍! | 剑指OfferII 089 | |
| 17 | LC213 打家劫舍 II | Note | Medium | 动态规划:继续打家劫舍! | 剑指OfferII 090 | |
| 18 | LC337 打家劫舍 III | Note | Medium | 动态规划:还要打家劫舍! | 哈希表 | 树形dp | 深度优先遍历(后序遍历) | |
| 19 | LC121 买卖股票的最佳时机 | Note | Easy | 动态规划:买卖股票的最佳时机 | 剑指Offer63 | 贪心算法 | |
| 20 | LC123 买卖股票的最佳时机 III | Note | Hard | 动态规划:买卖股票的最佳时机III | |
| 21 | LC188 买卖股票的最佳时机 IV | Note | Hard | 动态规划:买卖股票的最佳时机IV | |
| 22 | LC309 最佳买卖股票时机含冷冻期 | Note | Medium | 动态规划:最佳买卖股票时机含冷冻期 | |
| 23 | LC300 最长递增子序列 | Note | Medium | 动态规划:最长递增子序列 | |
| 24 | LC674 最长连续递增序列 | Note | Easy | 动态规划:最长连续递增序列 | 贪心算法 | |
| 25 | LC718 最长重复子数组 | Note | Medium | 动态规划:最长重复子数组 | |
| 26 | LC1143 最长公共子序列 | Note | Medium | 动态规划:最长公共子序列 | 剑指OfferII 095 | |
| 27 | LC1035 不相交的线 | Note | Medium | 动态规划:不相交的线 | |
| 28 | LC392 判断子序列 | Note | Easy | 动态规划:判断子序列 | |
| 29 | LC115 不同的子序列 | Note | Hard | 动态规划:不同的子序列 | 剑指OfferII 097 | |
| 30 | LC583 两个字符串的删除操作 | Note | Medium | 动态规划:两个字符串的删除操作 | |
| 31 | LC72 编辑距离 | Note | Hard | 动态规划:编辑距离 | |
| 32 | LC647 回文子串 | Note | Medium | 动态规划:回文子串 | 剑指OfferII 020 | 双指针 | |
| 33 | LC516 最长回文子序列 | Note | Medium | 动态规划:最长回文子序列 | |
| 34 | LC5 最长回文子串 | Note | Medium | 5.最长回文子串 | 双指针 | |
| 35 | LC132 分割回文串 II | Note | Hard | 132.分割回文串II | |
| 36 | LC673 最长递增子序列的个数 | Note | Medium | 673.最长递增子序列的个数 | TODO:学完树状数组再做一遍 | |
| 其他 | 0 | LC69 Sqrt(x) | Note | Easy | 剑指OfferII 072 | 二分查找 | 牛顿迭代法 |
| 1 | 05.01. 插入 | Note | Easy | 程序员面试金典 | 位运算 | |
| 2 | 05.06. 整数转换 | Note | Easy | 程序员面试金典 | 位运算(统计二进制位1的个数) | |
| 3 | 05.07. 配对交换 | Note | Easy | 程序员面试金典 | 位运算 | |
| 4 | 16.07. 最大数值 | Note | Easy | 程序员面试金典 | 位运算 | |
| 5 | 16.09. 运算 | Note | Medium | 程序员面试金典 | 数学题 | |
| 6 | 16.01. 交换数字 | Note | Medium | 程序员面试金典 | 位运算(异或) | |
| 7 | 16.03. 交点 | Note | Hard | 程序员面试金典 | 数学题 | |
| 8 | 16.13. 平分正方形 | Note | Medium | 程序员面试金典 | 数学题 | |
| 9 | 17.01. 不用加号的加法 | Note | Easy | 程序员面试金典 | 剑指Offer65 | 位运算 | |
| 10 | 16.05. 阶乘尾数 | Note | Easy | 程序员面试金典 | |
| 11 | 16.14. 最佳直线 | Note | Medium | 程序员面试金典 | 哈希表(重写equals和hashCode) | 数学题 | TODO:有时间再去学习下民间解法 |
|
| 12 | LC191 位1的个数 | Note | Easy | 剑指Offer15 | 位运算(统计二进制位1的个数) | 源码分析:Integer.bitCount() |
|
| 13 | LC50 Pow(x, n) | Note | Medium | 剑指Offer16 | 递归 | |
| 14 | 64. 求1+2+…+n | Note | Medium | 剑指offer | 递归 | |
| 15 | 62. 圆圈中最后剩下的数字 | Note | Easy | 剑指offer | 换个角度举例解决约瑟夫环 | |
| 16 | LC29 两数相除 | Note | Medium | 剑指OfferII 001 | 递归 | 位运算 | |
| 17 | 08.06. 汉诺塔问题 | Note | Easy | 程序员面试金典 | 分治法 | |
| 18 | LC400 第 N 位数字 | Note | Medium | 剑指Offer44 | |
| 19 | 05.04. 下一个数 | Note | Medium | 程序员面试金典 | 位运算 | |
| 20 | LC1356 根据数字二进制下 1 的数目排序 | Note | Easy | 1356.根据数字二进制下1的数目排序 | 定制排序 | 位运算 |