- 树
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 二叉树的前序遍历 | Python | 递归方法简单,迭代方法需牢记(栈) | 中等 | |
2 | 二叉树的中序遍历 | Python | 递归方法简单,迭代方法需牢记(颜色标记法、栈) | 中等 | |
3 | 二叉树的后序遍历 | Python | 递归方法简单,迭代方法需牢记(栈+结果反转)/颜色标记法 | 中等 | |
4 | 剑指 Offer 33. 二叉搜索树的后序遍历序列 | Python | 递归分治、辅助单调栈(看不太懂) | 中等 | |
5 | 求根到叶子节点数字之和 | Python | dfs/bfs | 中等 | |
6 | 二叉树的层次遍历 | Python | 队列 | 中等 | |
7 | 二叉树的层次遍历II | Python | 队列 | 中等 | |
8 | 二叉树的右视图 | Python | 层次遍历 | 中等 | |
9 | 二叉树的层平均值 | Python | 层次遍历 | 简单 | |
10 | N叉树的层序遍历 | Python | 层次遍历 | 中等 | |
11 | 翻转二叉树 | Python/java | 递归 | 简单 | |
12 | 二叉树的锯齿形层次遍历 | Python | 层次遍历(队列) | 中等 | |
13 | 二叉搜索树迭代器 | Python | 基于中序遍历 | 中等 | 再看 |
14 | 合并两个有序链表 | Python | 简单 | ||
15 | 合并两个链表 | Python | 中等 | ||
16 | 反转链表 | Python | 简单 | ||
17 | 合并K个升序链表 | Python | 分治(归并) | 困难 | 其实很简单,先拆分成单个,然后两个两个合并即可,再看下吧 |
18 | 二叉树中的最大路径和 | Python | 递归,注意返回值为root.val+max(l,r) | 困难 | 比较简单,再看下吧 |
19 | 从前序与中序遍历序列构造二叉树 | Python | 递归 | 中等 | |
20 | 二叉搜索树节点最小距离 | Python | 中序遍历 | 简单 | |
21 | 二叉搜索树的最小绝对差 | Python | 中序遍历 | 简单 | 和上个题是同一个题 |
22 | 实现Trie前缀树 | Python | 前缀树 | 中等 | 再看 |
23 | 两两交换链表中的节点 | Python | 中等 | 做过相似的题目,感觉不难,可以再看下 | |
24 | 递增顺序搜索树 | Python | 中序遍历 | 简单 | |
25 | 二叉搜索树的范围和 | Python | 中序遍历 | 简单 | |
26 | 二叉树的直径 | Python | 求顶点数量-1更简洁些 | 简单 | |
27 | 填充每个节点的下一个右侧节点指针 | Python | 借助next指针/层次遍历 | 中等 | 面试碰到过,再看下吧 |
28 | 对称的二叉树 | Python | 栈/递归 | 简单 | 再看下吧 |
29 | 从上到下打印二叉树I | Python | bfs | 简单 | |
30 | 从上到下打印二叉树II | Python | 层次遍历 | 简单 | |
31 | 从上到下打印二叉树III | Python | 层次遍历 | 中等 | |
32 | 二叉树中和为某一值的路径 | Python | dfs | 中等 | |
33 | 二叉搜索树与双向链表 | Python | dfs | 中等 | 再看 |
34 | 序列化二叉树 | Python | 层次遍历/先序遍历 | 困难 | 再看 |
35 | 二叉搜索树的第k大节点 | Python | 中序遍历的逆序 | 简单 | 再看 |
36 | 二叉树的深度 | Python | dfs/层次遍历 | 简单 | |
37 | 平衡二叉树 | Python | 递归 | 简单 | |
38 | 二叉搜索树的最近公共祖先 | Python | 简单 | 再看 | |
39 | 二叉树的最近公共祖先 | Python | 上一题中字典方法 | 简单 |
- 数组
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 搜索插入位置 | Python | 关于while(left < right) 还是 while(left <= right),到底是right = middle呢,还是要right = middle - 1问题的思考. 优秀解答链接 | 简单 | 回顾对开闭区间的理解 |
2 | 长度最小的子数组 | Python | 滑动窗口 | 中等 | |
3 | 岛屿的周长 | Python | 迭代/dfs/bfs | 简单 | 看下,尤其是最简单的迭代 |
4 | 螺旋矩阵 II | Python | 模拟 | 中等 | |
5 | O(1) 时间插入、删除和获取随机元素 - 允许重复 | Python | 数组+哈希表 | 困难 | 再看 |
6 | 单词拆分 II | Python | dfs | 困难 | 再看 |
7 | 有效的山脉数组 | Python | 遍历 | 简单 | |
8 | 插入区间 | Python | 数组合并 | 困难 | 再看 |
9 | 买卖股票的最佳时机II | Python | 遍历 | 简单 | |
10 | 距离顺序排列矩阵单元格 | Python | 曼哈顿距离 | 简单 | |
11 | 加油站 | Python | 技巧型 | 中等 | 再看 |
12 | 直方图的水量 | Python | 两次遍历/双指针 | 困难 | 不难,再看下吧 |
13 | 翻转对 | Python | 归并排序/树状数组(没看懂) | 困难 | 归并排序经典题目,再看 |
14 | 三角形的最大周长 | Python | sort+两边之和大于第三边 | 简单 | |
15 | 大样本统计 | Python | 最大/最小/中位数/众数/平均数 | 中等 | |
16 | 计算质数 | Python | 埃氏筛 | 简单 | 再看 |
17 | 二维数组的查找 | Python | 左下角开始,查找值大于当前值往右找,小于往上找 | 中等 | |
18 | 搜索二维矩阵II | Python | 题目和上题为一个题 | 中等 | |
19 | 杨辉三角 | Python | 简单 | 。 | |
20 | 翻转矩阵后的得分 | Python | 脑筋急转弯 | 中等 | 再看 |
21 | 区间子数组个数 | Python | 两个结果集相减 | 中等 | 再看 |
22 | K个不同整数的子数组 | Python | 哈希表+两个结果集相减 | 中等 | 再看 |
23 | 找不同 | Python | 位运算/ASCII码和的差/桶计数/哈希表 | 简单 | |
24 | 旋转图像 | Python | 中等 | ||
25 | 和相同的二元子数组 | Python | 前缀和+哈希表 / 找出所有1所在位置 | 中等 | 再看 |
26 | 分发糖果 | Python | 两次遍历 | 困难 | 再看 |
27 | 较大分组的位置 | Python | 一次遍历 | 简单 | |
28 | 旋转数组 | Python | 翻转数组/环形替换 | 中等 | |
29 | 可被5整除的二进制前缀 | Python | 简单 | ||
30 | 缀点成线 | Python | 比较斜率/斜率+set/平移过原点+求Ax+By=0 | 简单 | |
31 | 三个数的最大乘积 | Python | 排序/线性扫描找出最大三个数和最小两个数 | 简单 | |
32 | 数组形式的整数加法 | Python | 简单 | ||
33 | 最长连续递增序列 | Python | 简单 | ||
34 | 寻找数组的中心索引 | Python | 简单 | ||
35 | 非递减序列 | Python | 简单 | 再看,第一次做感觉并不是很简单 | |
36 | 杨辉三角II | Python | 递归 | 简单 | |
37 | 找到所有数组中消失的数字 | Python | 简单 | 再看下 | |
38 | 最大连续1的个数 | Python | 简单 | ||
39 | 数组拆分I | Python | 简单 | ||
40 | 重塑矩阵 | Python | 简单 | ||
41 | K连续位的最小翻转次数 | Python | 差分数组 | 困难 | 再看 |
42 | 托普利茨矩阵 | Python | 遍历 | 简单 | |
43 | 转置矩阵 | Python | 遍历 | 简单 | |
44 | 区域和检索-数组不可变 | Python | 前缀和 | 简单 | |
45 | 二维区域和检索 | Python | 图形面积变换/哈希表+前缀和+图形面积变化 | 中等 | |
46 | 螺旋矩阵 | Python | 遍历 | 中等 | |
47 | 设计停车系统 | Python | 遍历 | 简单 | |
48 | 矩阵置零 | Python | set/第一行和第一列记录该列/行是否置0 | 中等 | |
49 | 搜索二维矩阵 | Python | 中等 | ||
50 | 扁平化嵌套列表迭代器 | Python | 中等 | ||
51 | 接雨水 | Python | 遍历获取到当前为止最小值和最大值/双指针/栈 | 困难 | 经典面试题.再看 |
52 | 下一个排列 | Python | 排序 | 中等 | 主要考察排序 |
53 | 合并区间 | Python | 中等 | ||
54 | 合并两个有序数组 | Python | 简单 | ||
55 | 缺失的第一个正数 | Python | 困难 | 再看下吧(会的不难) | |
56 | 跳跃游戏 | Python | 中等 | 再看下(自己用了个O(n^2)复杂度,使用O(n)就可以) | |
57 | 螺旋矩阵III | Python | 中等 | 再看下 | |
58 | 给 N x 3 网格图涂色的方案数 | Python | 递归 | 困难 | 再看下(用递推法可以很简单,dfs超时) |
59 | 剑指offer03:数组中重复的数字 | Python | 原地置换/set | 简单 | |
60 | 顺指针打印矩阵 | Python | 简单 | ||
61 | 数组中出现次数超过一半的数字 | Python | 投票算法/哈希/排序 | 简单 | 投票算法可以再看下 |
62 | 连续子数组的最大和 | Python | 简单 | ||
63 | 数组中数字出现的次数 | Python | 异或 | 中等 | |
64 | 扑克牌中的顺子 | Python | 简单 | ||
65 | 队列的最大值 | Python | 单调递减队列 | 中等 | 再看下 |
66 | 圆圈中最后剩下的数字 | Python | 推导/模拟 | 简单 | 约瑟夫环问题,再看下 |
67 | 构建乘积数组 | Python | 一次遍历+一个常量 / 两次遍历 | 中等 |
- 链表
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 反转链表 | Python | 双指针/递归 | 简单 | |
2 | 环形链表 | Python | 双指针 | 中等 | |
3 | 移除链表元素 | Python | 双指针 | 简单 | |
4 | 设计链表 | Python | 链表的增删查 | 中等 | |
5 | 环形链表II | Python | 链表技巧型 | 中等 | |
6 | 奇偶链表 | Python | 链表拆分 | 中等 | 再看 |
7 | 对链表进行插入排序 | Python | 链表节点插入 | 中等 | 再看 |
8 | k个一组翻转链表 | Python | 翻转链表 | 困难 | 再看(经典面试题) |
9 | 相交链表 | Python | 简单 | ||
10 | 分隔链表 | Python | 一次遍历创建两个链表/两次遍历创建一个链表 | 中等 | |
11 | 旋转链表 | Python | 中等 | ||
12 | 设计哈希集合 | Python | 链地址法/使用一个超大数组 | 简单 | 温习链地址法的使用 |
13 | 设计哈希映射 | Python | 链地址法(和上面题一样做法,在链表节点的构建上加上val即可)/使用一个超大数组 | 简单 | |
14 | 反转链表II | Python | 分段处理+头插法 | 中等 | 再看 |
15 | 删除排序链表中的重复元素 | Python | 链表遍历/哈希表 | 简单 | |
16 | 删除排序链表中的重复元素II | Python | 链表遍历/哈希表 | 中等 | 再看 |
17 | LRU 缓存机制 | Python | 双向链表+哈希表 | 中等 | 经典面试题 |
18 | 两数相加 | Python | 链表 | 中等 | 经典面试题 |
19 | 重排链表 | Python | 链表 | 中等 | 链表合并部分需要看下 |
20 | 删除链表的倒数第N个节点 | Python | 链表+快慢指针 | 中等 | 再看 |
21 | 两数相加II | Python | 栈/反转链表/数组存储链表对应位置加和,使用数组进位 | 中等 | 栈的经典应用,再看下 |
22 | 复制带随机指针的链表 | Python | 递归 | 中等 | 第一次见随机指针的处理,再看下 |
23 | 复杂链表的复制 | Python | 递归 | 中等 | 再看下 |
24 | 两个链表的第一个公共节点 | Python | 简单 | 有些技巧性,再看下 |
- 哈希表
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | O(1) 时间插入、删除和获取随机元素 - 允许重复 | Python | 数组+哈希表 | 困难 | 再看 |
2 | 两个数组的交集 | Python | 哈希表 | 简单 | |
3 | 有效的字母异位词 | Python | 哈希表/数组 | 简单 | |
4 | 赎金信 | Python | 哈希表 | 简单 | |
5 | 分糖果 | Python | 技巧型哈希 | 简单 | 第一次没做出来,看下吧 |
6 | 快乐数 | Python | 哈希表 | 简单 | |
7 | 两数之和 | Python | 哈希表 | 简单 | |
8 | 四数之和II | Python | map | 中等 | 再看,第一次没做出来 |
9 | 存在重复元素II | Python | map | 简单 | |
10 | 存在重复元素III | Python | 桶+map/树 | 中等 | 再看,有技巧性 |
11 | 数组中的k-diff数对 | Python | 哈希表/双指针 | 中等 | 再看 |
12 | 分割数组为连续子序列 | Python | 哈希表+最小堆/哈希表 | 中等 | 再看 |
13 | 将x减到0的最小操作数 | Python | 累加和+哈希表/双指针 | 中等 | 再看,挺好的题目 |
14 | 环绕字符串中唯一的子字符串 | Python | 哈希表 | 中等 | 再看,很好的题目 |
15 | K个不同整数的子数组 | Python | 哈希表+两个结果集相减 | 中等 | 再看 |
16 | 存在重复元素 | Python | 哈希表 | 简单 | |
17 | 字母异位词分组 | Python | 哈希表 | 中等 | 再看下吧 |
18 | 单词规律 | Python | 哈希表 | 简单 | |
19 | 柠檬水找零 | Python | 哈希表 | 简单 | |
20 | 字符串中的第一个唯一字符 | Python | 哈希表 | 简单 | |
21 | 环形数组循环 | Python | 哈希表 | 中等 | 做出来了,还是比较难的,再看 |
22 | 串联所有单词的字串 | Python | 哈希表/哈希表+滑动窗口 | 困难 | 再看 |
23 | 同构字符串 | Python | 哈希表 | 简单 | 再看,建立字符间映射方法更好 |
24 | 等价多米诺骨牌对的数量 | Python | 哈希表 | 简单 | |
25 | 数组的度 | Python | 哈希表 | 简单 | |
26 | 无重复字符的最长子串 | Python | 哈希表 | 中等 | |
27 | 森林中的兔子 | Python | 哈希表 | 中等 | |
28 | 砖墙 | Python | 哈希表 | 中等 | |
29 | 单词的压缩编码 | Python | 哈希表/字典树 | 中等 | 字典树需要看下 |
30 | 猜数字游戏 | Python | 哈希表 | 中等 | |
31 | 只出现一次的数字II | Python | 哈希表 | 中等 | |
32 | 第一个只出现一次的字符 | Python | 哈希表 | 简答 |
- 字符串
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 反转字符串 | Python | 字符串 | 简单 | |
2 | 反转字符串II | Python | 字符串 | 简单 | |
3 | 替换空格 | Python | 字符串 | 简单 | |
4 | 左旋转字符串 | Python | 字符串 | 简单 | |
5 | 实现strStr() | Python | KMP/遍历 | 简单 | KMP经典题目,再看 |
6 | 重复的子字符串 | Python | KMP/拼接/遍历 | 简单 | KMP经典题目,拼接方法也很好再看 |
7 | 有效的字母异位词 | Python | 字典/桶 | 简单 | |
8 | 上升下降字符串 | Python | 桶 | 简单 | |
9 | 分割两个字符串得到回文串 | Python | 说不上来什么类型,很有意思的题目 | 中等 | 再看 |
10 | Dota2参议院 | Python | 中等 | ||
11 | 外观数列 | Python | 简单 | ||
12 | 表示数值的字符串 | Python | 中等 | 逻辑比较复杂,面试没遇到过 | |
13 | 反转单词顺序 | Python | 简单 |
- 位运算
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 根据数字二进制下 1 的数目排序 | Python | 其中一种方法: 位运算+字典 | 简单 | |
2 | 二进制中 1 的个数 | Python | &与操作(n&(n-1)) | 简单 | |
3 | 位1 的个数 | Python | 同上 | 简单 | |
4 | 颠倒二进制位 | Python | 分治法/逐位反转 | 简单 | 再看 |
5 | 数组中数字出现的次数 II | Python | 二进制位1的个数累加和并对3取余 | 中等 | 再看 |
- 栈与队列
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 用栈实现队列 | Python | 栈+队列 | 简单 | 有平均复杂度O(1)的方法,之前做的麻烦些,再看 |
2 | 用队列实现栈 | Python | 单队列实现/双队列实现 | 简单 | |
3 | 有效的括号 | Python | 栈 | 简单 | |
4 | 删除字符串中的所有相邻重复项 | Python | 栈 | 简单 | 栈的经典题目,可以再看下 |
5 | 逆波兰表达式求值 | Python | 栈 | 中等 | 注意下除法结果为负数的情况即可 |
6 | 滑动窗口最大值 | Python | 单调队列 | 困难 | |
7 | 移掉k位数字 | Python | 栈 | 中等 | 再看 |
8 | 根据身高重建队列 | Python | 技巧型 | 中等 | 再看 |
9 | 132模式 | Python | 栈 | 中等 | 再看 |
10 | 柱状图中最大的矩形 | Python | 栈 | 困难 | 经典栈问题,再看 |
11 | 去除重复字母 | Python | 栈 | 困难 | 再看 |
12 | 不同字符的最小子序列 | Python | 栈,和上个题目是一个题 | 困难 | |
13 | 拼接最大数 | Python | 遍历+上面题为基础+合并 | 困难 | 再看 |
14 | 比较含退格的字符串 | Python | 栈/双指针 | 简单 | |
15 | 最大矩形 | Python | 栈 | 困难 | 基于柱状图中最大的矩形题目,再看 |
16 | 栈的压入弹出序列 | Python | 栈 | 中等 | 再看下吧 |
17 | 包含min函数的栈 | Python | 栈 | 简单 | |
18 | 下一个更大元素II | Python | 栈 | 中等 | 再看 |
19 | 删除字符串中所有相邻重复项 | Python | 栈(更简单)/贪心 | 简单 | |
20 | 基本计算器 | Python | 栈 | 困难 | 再看 |
21 | 基本计算器II | Python | 栈 | 中等 | 再看 |
22 | 验证二叉树的前序序列化 | Python | 栈 | 中等 | 再看(以前没做过这类题目,不难但是没见过就不会) |
23 | 笨阶乘 | Python | 栈 | 中等 | 再看 |
24 | 最大正方形 | Python | dp(dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1) / 栈 | 中等 | |
25 | 两数相加II | Python | 栈/反转链表/数组存储链表对应位置加和,使用数组进位 | 中等 | 栈的经典应用,再看下 |
26 | 每日温度 | Python | 栈 | 中等 | |
27 | 反转每对括号间的子串 | Python | 栈 | 中等 | |
28 | 最长有效括号 | Python | 栈/两次遍历/dp | 困难 | 再看 |
- 堆
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 前k个高频元素 | Python | 最小堆/桶排序 | 中等 | |
2 | 最接近原点的k个点 | Python | 最大堆/桶排序/直接排序 | 中等 | 再看 |
3 | 数组中第k个最大元素 | Python | 最小堆 | 中等 | |
4 | 重构字符串 | Python | 贪心算法+最大堆/计数 | 中等 | 再看 |
5 | 分割数组为连续子序列 | Python | 哈希表+最小堆/哈希表 | 中等 | 再看 |
6 | 任务调度器 | Python | 桶排序/最大堆 | 中等 | 再看 |
7 | 最后一块石头的重量 | Python | 最大堆 | 简单 | |
8 | 寻找两个正序数组的中位数 | Python | 最小堆+最大堆/二分查找(还没懂)/双指针遍历 | 困难 | 经典面试题 |
9 | 数组中第K个最大元素 | Python | 最小堆/冒泡排序 | 中等 | |
10 | 前K个高频单词 | Python | 哈希表+堆 / 只用哈希表 | 中等 | |
11 | 最小的k个数 | Python | 最大堆/排序/冒泡 | 简单 | |
12 | 数据流中的中位数 | Python | 最大堆+最小堆 | 困难 | 做出来了 |
- 滑动窗口/双指针
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 无重复字符的最长字串 | Python | 双指针+set | 中等 | |
2 | 有序数组的平方 | Python | 双指针 | 简单 | |
3 | 数组中的k-diff数对 | Python | 哈希表/双指针 | 中等 | 再看 |
4 | 最短大于等于K的子数组长度 | Python | 双指针 | 中等 | 字节11.27面试真题 |
5 | 删除排序数组中的重复项 II | Python | 双指针 | 中等 | |
6 | 移除元素 | Python | 双指针(本人SB似的当遍历值和val相等的时候非要找到下一个不相等的,直接遍历下一个元素就可以了呀) | 简单 | 看下吧 |
7 | 三数之和 | Python | 双指针 | 中等 | |
8 | 四数之和 | Python | 两个for循环嵌套+双指针 | 中等 | |
9 | 按奇偶排序数组II | Python | 双指针/遍历 | 简单 | 再看 |
10 | 移动零 | Python | 双指针/遍历 | 简单 | |
11 | 直方图的水量 | Python | 两次遍历/双指针 | 困难 | 不难,再看下吧 |
12 | 水果成篮 | Python | 双指针 | 中等 | 看心情 |
13 | 将x减到0的最小操作数 | Python | 累加和+哈希表/双指针 | 中等 | 再看,挺好的题目 |
14 | 翻转字符串中的元音字母 | Python | 哈希表+双指针 | 简单 | |
15 | 替换后的最长重复字符 | Python | 双指针 | 中等 | 第一次见窗口只会不变或扩大,不会变小.再看 |
16 | 区间列表的交集 | Python | 双指针 | 中等 | |
17 | 长按键入 | Python | 双指针/桶 | 简单 | |
18 | 最大连续1的个数III | Python | 双指针(只会不变或变长的滑动窗口) | 中等 | |
19 | 令牌放置 | Python | 双指针 | 中等 | |
20 | 替换子串得到平衡字符串 | Python | 双指针 | 中等 | 虽然做出来了,代码还是相对复杂些的 |
21 | 通过删除字母匹配到字典里最长单词 | Python | 双指针 | 中等 | |
22 | 合并排序的数组 | Python | 双指针 | 简单 | |
22 | 救生艇 | Python | 双指针 | 中等 | |
23 | 安排工作以达到最大收益 | Python | 排序+双指针 | 中等 | 再看 |
24 | 最小差 | Python | 双指针 | 中等 | |
25 | 单词距离 | Python | 哈希表+双指针 | 中等 | |
26 | 统计子串中的唯一字符 | Python | 双指针 | 困难 | 再看,比较巧妙,代码很简单 |
27 | 可见点的最大数目 | Python | 数学+双指针 | 困难 | 主要是atan2函数的使用,不难,再看下吧 |
28 | 乘机小于k的子数组 | Python | 双指针/对数的累加和 | 中等 | 双指针求以right索引为结尾的子数组简单,我一开始求的以left开始,不好做.再看下 |
29 | 推多米诺 | Python | 双指针/两次遍历统计每个位置受力情况 | 中等 | 虽然做出来了,但是两次遍历方法值得再看 |
30 | 删除子数组的最大得分 | Python | 双指针 | 中等 | |
31 | 三数之和的多种可能 | Python | 哈希表+双指针+分情况 | 中等 | 代码量较大,虽然做出来了,可以再看下 |
32 | 串联所有单词的字串 | Python | 哈希表/哈希表+滑动窗口 | 困难 | 再看 |
33 | 分发饼干 | Python | 排序+双指针 | 简单 | |
34 | 种花问题 | Python | 双指针 | 简单 | 再看 |
35 | 汇总区间 | Python | 双指针 | 简单 | |
36 | 滑动窗口中位数 | Python | 双指针+二分法 | 困难 | |
37 | 子数组最大平均数I | Python | 双指针 | 简单 | |
38 | 尽可能使字符串相等 | Python | 双指针/前缀和+二分查找 | 中等 | 前缀和+二分查找方法还需再看 |
39 | 可获得的最大点数 | Python | 双指针 | 中等 | |
40 | 绝对值不超过限制的最长连续子数组 | Python | 双指针+单调队列 | 中等 | 再看(重点看) |
41 | 爱生气的书店老板 | Python | 双指针 | 中等 | |
42 | 翻转图像 | Python | 双指针 | 简单 | |
43 | 盛水最多的容器 | Python | 双指针 | 中等 | |
44 | 最大子序和 | Python | 双指针/分治 | 简单 | 分治法可以再看 |
45 | 删除有序数组中的重复项 II | Python | 双指针 | 中等 | |
46 | 删除链表的倒数第N个节点 | Python | 链表+快慢指针 | 中等 | 再看 |
47 | 最小覆盖子串 | Python | 双指针 | 困难 | 再看下吧.难度还好, 就是代码有些复杂 |
48 | 等差数列划分 | Python | 双指针 | 中等 | |
49 | 调整数组顺序使奇数位于偶数前面 | Python | 双指针 | 简单 | |
50 | 和为s的两个数字 | Python | 双指针 | 简单 | |
51 | 和为s的连续正数序列 | Python | 双指针 | 简单 | 再看 |
- 桶
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 重构字符串 | Python | 贪心算法+最大堆/桶计数 | 中等 | 再看 |
2 | 有效的字母异位词 | Python | 字典/桶 | 简单 | |
3 | 上升下降字符串 | Python | 桶 | 简单 | |
4 | 前k个高频元素 | Python | 最小堆/桶排序 | 中等 | |
5 | 最接近原点的k个点 | Python | 最大堆/桶排序/直接排序 | 中等 | 再看 |
6 | 存在重复元素III | Python | 桶+map/树 | 中等 | 再看,有技巧性 |
7 | 最大间距 | Python | 桶排序 | 困难 | 再看 |
8 | 任务调度器 | Python | 桶排序/最大堆 | 中等 | 再看 |
9 | 字符串的排列 | Python | 桶排序+不知道算不算的双指针/哈希表+双指针 | 中等 | 再看 |
- 股票问题
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 买卖股票的最佳时机 | Python | 遍历 | 简单 | |
2 | 买卖股票的最佳时机II | Python | 遍历 | 简单 | |
3 | 买卖股票最佳时机含手续费 | Python | dp(设置sell+buy两个变量,进行dp) | 中等 | 股票经典问题之一 |
4 | 买卖股票最佳时机III | Python | dp | 困难 | |
5 | 买卖股票最佳时机IV | Python | dp | 困难 | 再看 |
- 二分法
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 在排序数组中查找元素的第一个和最后一个位置 | Python | 二分查找 | 中等 | |
2 | 最长递增子序列 | Python | DP/贪心+二分查找 | 中等 | 面试高频题目,再看 |
3 | 尽可能使字符串相等 | Python | 双指针/前缀和+二分查找 | 中等 | 前缀和+二分查找方法还需再看 |
4 | 俄罗斯套娃信封问题 | Python | 递增递减排序+二分查找/dp | 困难 | 再看(LIS变形) |
5 | 搜索旋转排序数组 | Python | 二分 | 中等 | 再看 |
6 | 搜索旋转排序数组II | Python | 二分(左中右相等的情况left+=1,right-=1) | 中等 | |
7 | 寻找旋转排序数组中的最小值 | Python | 二分查找(比较nums[mid]和nums[right]) | 中等 | |
8 | 寻找旋转排序数组中的最小值 II | Python | 二分查找(nums[left]==nums[mid]==nums[right],则left+=1,right-=1) | 困难 | |
9 | 在 D 天内送达包裹的能力 | Python | 二分查找 | 中等 | |
10 | 平方数之和 | Python | 使用pow()函数/二分查找 | 中等 | |
11 | 在排序数组中查找数字 I | Python | 二分查找/哈希 | 简单 | |
12 | 0~n-1中缺失的数字 | Python | 二分查找 | 简单 |
- DFS
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 将数组拆分成斐波那契序列 | Python | DFS | 中等 | 经典dfs+剪枝 |
2 | 移除最多的同行或同列石头 | Python | 并查集/bfs/dfs) | 中等 | 再看 |
3 | 课程表 | Python | 拓扑排序(入度表+临接表)+bfs / dfs(优化的dfs不太会) | 中等 | 再看 |
4 | 课程表II | Python | 拓扑排序(入度表+临接表)+bfs / 拓扑排序+dfs | 中等 | 和课程表1思想一样,就是输出拓扑排序 |
5 | 分割字符串 | Python | dfs+dp | 中等 | 可以再看下,做的时候自己没考虑到dp优化 |
6 | 子集II | Python | dfs | 中等 | |
7 | 全排列 | Python | dfs | 中等 | |
8 | 复原IP地址 | Python | dfs | 中等 | |
9 | 岛屿数量 | Python | dfs | 中等 | 可以再看下,简单 |
10 | 单词搜索 | Python | dfs | 中等 | |
11 | 括号生成 | Python | dfs | 中等 | |
12 | 解数独 | Python | dfs | 困难 | 再看下吧 |
13 | 解码方法 | Python | dfs+去重 | 中等 | 不难,再看下吧 |
14 | 组合总和IV | Python | dfs+记忆化搜索 | 中等 | |
15 | 树的子结构 | Python | 递归+dfs | 中等 | 再看 |
16 | 剑指offer-字符串的排列 | Python | dfs+剪枝 | 中等 | 再看 |
- BFS
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 单词接龙 | Python | 双向bfs/bfs | 中等 | 再看 |
2 | 移除最多的同行或同列石头 | Python | 并查集/bfs/dfs) | 中等 | 再看 |
3 | 课程表 | Python | 拓扑排序(入度表+临接表)+bfs / dfs(优化的dfs不太会) | 中等 | 再看 |
4 | 课程表II | Python | 拓扑排序(入度表+临接表)+bfs / 拓扑排序+dfs | 中等 | 和课程表1思想一样,就是输出拓扑排序 |
5 | 最小高度树 | Python | 拓扑排序+bfs | 中等 | 再看 |
- 拓扑排序
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 最小高度树 | Python | 拓扑排序+bfs | 中等 | 再看 |
2 | 课程表 | Python | 拓扑排序(入度表+临接表)+bfs / dfs(优化的dfs不太会) | 中等 | 再看 |
3 | 课程表II | Python | 拓扑排序(入度表+临接表)+bfs / 拓扑排序+dfs | 中等 | 和课程表1思想一样,就是输出拓扑排序 |
- DP
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 不同路径 | Python | DP | 中等 | |
2 | 最长上升子序列 | Python | DP/贪心+二分查找 | 中等 | 面试高频题目,再看 |
3 | 摆动序列 | Python | dp/贪心 | 中等 | 再看 |
4 | 买卖股票最佳时机含手续费 | Python | dp(设置sell+buy两个变量,进行dp) | 中等 | 股票经典问题之一 |
5 | 买卖股票最佳时机III | Python | dp | 困难 | |
6 | 使用最小代价爬楼梯 | Python | dp | 简单 | |
7 | 斐波那契数 | Python | dp/递归+lru_cache | 简单 | |
8 | 最长湍流子数组 | Python | dp/双指针 | 中等 | 再看 |
9 | 比特位计数 | Python | dp | 中等 | 再看 |
10 | 分割回文串II | Python | dp | 困难 | 再看 |
11 | 不同的子序列 | Python | dp | 困难 | 再看 |
12 | 最长公共子序列 | Python | dp(经典dp) | 中等 | |
13 | 最长回文子串 | Python | 双指针/dp | 中等 | 经典面试题 |
14 | 爬楼梯 | Python | dp | 简单 | |
15 | 正则表达式匹配 | Python | dp | 困难 | 再看(经典面试题目) |
16 | 编辑距离 | Python | dp | 困难 | 经典面试题目 |
17 | 最大正方形 | Python | dp(dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1) / 栈 | 中等 | |
18 | 打家劫舍 | Python | dp | 中等 | |
19 | 零钱兑换 | Python | dp | 中等 | 再看 |
20 | 跳跃游戏II | Python | dp | 中等 | |
21. | 丑数II | Python | dp+数学 | 中等 | |
22. | 打家劫舍II | Python | dp | 中等 | 再看 |
23. | 最大整除子集 | Python | dp | 中等 | 再看 |
24. | 把数字翻译成字符串 | Python | dp/dfs | 中等 | 稍微看下dp |
25. | n个骰子的点数 | Python | dp | 中等 | dp想想就混了感觉… |
- 贪心算法
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 摆动序列 | Python | dp/贪心 | 中等 | 再看 |
2 | 单调递增的数组 | Python | 贪心 | 中等 | 再看 |
3 | 无重叠区间 | Python | 贪心 | 中等 | 再看 |
4 | 情侣牵手 | Python | 并查集/贪心 | 困难 | 再看 |
5 | 青蛙过河 | Python | 贪心/dp | 困难 | 贪心 |
- 并查集
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 冗余连接 | Python | 并查集/bfs/dfs/拓扑排序 | 中等 | 只会并查集 |
2 | 交换字符串中的元素 | Python | 并查集(一个集合中的元素可以任意交换) | 中等 | |
3 | 省份数量 | Python | 并查集/bfs/dfs) | 中等 | |
4 | 移除最多的同行或同列石头 | Python | 并查集/bfs/dfs) | 中等 | 再看 |
5 | 账户合并 | Python | 并查集(比较复杂,做出来了,花费时间较多) | 中等 | |
6 | 连通网络的操作次数 | Python | 并查集(线够时连通分量数-1) | 中等 | |
7 | 由斜杠划分区域 | Python | 并查集 | 中等 | |
8 | 情侣牵手 | Python | 并查集/贪心 | 困难 | 再看 |
- 分治法
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1 | 至少有K个重复字符的最长子串 | Python | 分治法/滑动窗口(没看懂) | 中等 | 再看 |
2 | 剑指 Offer 33. 二叉搜索树的后序遍历序列 | Python | 递归分治、辅助单调栈(看不太懂) | 中等 | |
3 | 最大子序和 | Python | 双指针/分治 | 简单 | 分治法可以再看 |
4 | 合并K个升序链表 | Python | 最小堆/分治(归并) | 困难 | 最小堆简单效率高,分治法也很简单,先拆分成单个,然后两个两个合并即可,再看下吧 |
5 | 排序链表 | Python | 分治(归并) | 中等 | 再看下吧 |
6 | 数组中的逆序对 | Python | 分治(归并) | 困难 | 经典面试题 |
- 字典序
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1. | 字典序的第K小数字 | Python | 字典序 | 困难 | 再看(面试经典题目) |
- 数学
# | Title | Solution | Backup | level | rewatch |
---|---|---|---|---|---|
1. | 阶乘后的零 | Python | 数学 | 简单 | 再看 |
2. | 整数反转 | Python | 数学 | 简单 | |
3. | 回文数 | Python | 数学/转换为字符串 | 简单 | |
4. | 丑数 | Python | 数学 | 简单 | |
5. | 丑数II | Python | dp+数学 | 中等 | 再看下 |
6. | 最大数 | Python | 自定义排序 | 中等 | 看下吧,自定义排序,感觉应该不会太考 |
7. | 把数组排成最小的数 | Python | 自定义排序 | 中等 | 和上个题一样 |
8. | 字符串相乘 | Python | 乘法在计算机中的运算规则 | 中等 | 再看 |
9. | 矩形区域不超过 K 的最大数值和 | Python | 有序集合 | 困难 | 再看 |
- 常见的排序代码
# 1.快速排序
class Solution:
def quick_sort(self, array, left, right):
if left >= right:
return array
l, r = left, right
temp = array[left]
while left < right:
while left < right and array[right] >= temp:
right -= 1
array[left] = array[right]
while left < right and array[left] <= temp:
left += 1
array[right] = array[left]
array[left] = temp
self.quick_sort(array, l, left - 1)
self.quick_sort(array, right + 1, r)
return array
# 2.归并排序
class Solution:
def guibing_sort(self, array):
length = len(array)
if length < 2:
return array
mid = length // 2
left = self.guibing_sort(array[:mid])
right = self.guibing_sort(array[mid:])
res = []
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
res.append(left[i])
i += 1
else:
res.append(right[j])
j += 1
if i < len(left):
res += left[i:]
if j < len(right):
res += right[j:]
return res