本仓库为本人和小伙伴的面试准备刷题库,题目均来自LeetCode(英文版)和面试常见题目,本仓库包含题解,目前由我、maple-zys和hulala1a维护(想要加入请参考格式配置),根目录的
Problems
为题解库文件夹,每道题以题目id为文件夹,其中包含题目说明和题解描述的markdown
文件(该文件按照二级标题统一格式)和一个对应的题解源码的py
文件。本仓库的部分题解包含的优化思路用于面试,面试解题时可以先按照原始思路做,面试官问优化思路再回答。
- lcof-26 树的子结构
- lcof-27 二叉树的镜像
- lcof-28 对称的二叉树
- lcof-32 I. 从上到下打印二叉树
- lcof-32 II. 从上到下打印二叉树 II
- lcof-32 III. 从上到下打印二叉树 III
- leetcode-100 相同的树
- leetcode-104 二叉树的最大深度
- leetcode-110 平衡二叉树
- leetcode-226 翻转二叉树
- leetcode-543 二叉树的直径
- leetcode-572 另一棵树的子树
- leetcode-617 合并二叉树
- leetcode-965 单值二叉树
- leetcode-4 寻找两个正序数组的中位数
- leetcode-33 搜索旋转排序数组
- leetcode-34 在排序数组中查找元素的第一个和最后一个位置
- leetcode-69 Sqrt(x)
- leetcode-81 搜索旋转排序数组 II
- leetcode-153 寻找旋转排序数组中的最小值
- leetcode-154 寻找旋转排序数组中的最小值 II
- leetcode-275 H 指数 II
- leetcode-287 寻找重复数
- leetcode-300 最长递增子序列
- leetcode-374 猜数字大小
- leetcode-410 分割数组的最大值
- leetcode-658 找到 K 个最接近的元素
- leetcode-704 二分查找
- leetcode-852 山脉数组的峰顶索引
- leetcode-875 爱吃香蕉的珂珂
- leetcode-1095 山脉数组中查找目标值
- leetcode-1300 转变数组后最接近目标值的数组和
- leetcode-1482 制作 m 束花所需的最少天数
- leetcode-1552 两球之间的磁力
- leetcode-72 编辑距离
- leetcode-583 两个字符串的删除操作
- leetcode-712 两个字符串的最小ASCII删除和
- leetcode-1312 让字符串成为回文串的最少插入次数
- leetcode-1647 字符频次唯一的最小删除次数
- leetcode-1541 平衡括号字符串的最少插入次数
下表为LeetCode美国版原始题库。
题目ID | 原题链接 | 题目全名 | 题目难度 | 题目类型 | 题解(点击下方) |
---|---|---|---|---|---|
3 | link | 无重复字符的最长子串 | Medium | 滑动窗口 | link |
11 | link | 盛最多水的容器 | Medium | 双指针 | link |
19 | link | 删除链表的倒数第 N 个结点 | Medium | 双指针 | link |
20 | link | 有效的括号 | Easy | 栈 | link |
21 | link | 合并两个有序链表 | Easy | 链表 | link |
36 | link | 有效的数独 | Medium | 数组 | link |
42 | link | 接雨水 | Hard | 双指针 | link |
53 | link | 最大子数组和 | Easy | 动态规划 | link |
56 | link | 合并区间 | Medium | 数组 | link |
72 | link | 编辑距离 | Hard | 动态规划 | link |
73 | link | 矩阵置零 | Medium | 数组 | link |
74 | link | 搜索二维矩阵 | Medium | 分治法 | link |
84 | link | 柱状图中最大的矩形 | Hard | 单调栈 | link |
100 | link | 相同的树 | Easy | 对称性递归 | link |
121 | link | 买卖股票的最佳时机 | Easy | 动态规划 | link |
141 | link | 环形链表 | Easy | 链表 | link |
153 | link | 寻找旋转排序数组中的最小值 | Medium | 二分查找 | link |
154 | link | 寻找旋转排序数组中的最小值 II | Hard | 二分查找 | link |
189 | link | 轮转数组 | Medium | 双指针 | link |
191 | link | 位1的个数 | Easy | 位运算 | link |
206 | link | 反转链表 | Easy | 链表 | link |
208 | link | 实现 Trie (前缀树) | 字典树 | link | |
229 | link | 求众数 II | Medium | 哈希表 | link |
231 | link | 2 的幂 | Easy | 位运算 | link |
237 | link | 删除链表中的节点 | Easy | 链表 | link |
283 | link | 移动零 | Easy | 双指针 | link |
299 | link | 猜数字游戏 | Medium | 哈希表 | link |
316 | link | 去除重复字母 | Medium | 单调栈 | link |
319 | link | 灯泡开关 | Medium | 数学推导 | link |
321 | link | 拼接最大数 | Hard | 单调栈 | link |
322 | link | 零钱兑换 | Medium | 动态规划 | link |
367 | link | 有效的完全平方数 | Easy | 分治法 | link |
372 | link | 超级次方 | Medium | 无 | link |
402 | link | 移掉 K 位数字 | Medium | 单调栈 | link |
410 | link | 分割数组的最大值 | Hard | 数组 | link |
416 | link | 分割等和子集 | Medium | 动态规划 | link |
443 | link | 压缩字符串 | Medium | 数组 | link |
430 | link | 扁平化多级双向链表 | Medium | 链表 | link |
447 | link | 回旋镖的数量 | Medium | 哈希表 | link |
453 | link | 最小操作次数使数组元素相等 | Medium | 数组 | link |
474 | link | 一和零 | Medium | 01背包问题 | link |
494 | link | 目标和 | Medium | 01背包问题 | link |
515 | link | 在每个树行中找最大值 | Medium | 二叉树 | link |
517 | link | 超级洗衣机 | Hard | 二叉树 | link |
518 | link | 零钱兑换 II | Medium | 动态规划 | link |
524 | link | 通过删除字母匹配到字典里最长单词 | Medium | 双指针 | link |
557 | link | 反转字符串中的单词 III | Easy | 双指针 | link |
560 | link | 和为 K 的子数组 | Medium | 前缀和 | link |
566 | link | 重塑矩阵 | Easy | 数组 | link |
567 | link | 字符串的排列 | Medium | 数组 | link |
575 | link | 分糖果 | Easy | 贪心 | link |
583 | link | 两个字符串的删除操作 | Medium | 动态规划 | link |
605 | link | 种花问题 | Easy | 贪心 | link |
684 | link | 冗余连接 | Medium | 并查集 | link |
721 | link | 账户合并 | Medium | 并查集 | link |
695 | link | 岛屿的最大面积 | Medium | 深度优先搜索 | link |
704 | link | 二分查找 | Easy | 二分查找 | link |
709 | link | 转换成小写字母 | Easy | 位运算 | link |
712 | link | 两个字符串的最小ASCII删除和 | Medium | 动态规划 | link |
725 | link | 分隔链表 | Medium | 链表 | link |
743 | link | 网络延迟时间 | Medium | 最短路径 | link |
786 | link | 第 K 个最小的素数分数 | Hard | 二分查找 | link |
787 | link | K 站中转内最便宜的航班 | Medium | 动态规划 | link |
876 | link | 链表的中间结点 | Easy | 双指针 | link |
879 | link | 盈利计划 | Hard | 01背包问题 | link |
934 | link | 最短的桥 | Medium | 图论 | link |
1218 | link | 最长定差子序列 | Medium | 动态规划 | link |
1293 | link | 网格中的最短路径 | Hard | 广度优先搜索 | link |
1312 | link | 让字符串成为回文串的最少插入次数 | Hard | 动态规划 | link |
1325 | link | 删除给定值的叶子节点 | Medium | 二叉树 | link |
1326 | link | 灌溉花园的最少水龙头数目 | Hard | 动态规划 | link |
1449 | link | 数位成本和为目标值的最大数字 | Hard | 动态规划 | link |
1541 | link | 平衡括号字符串的最少插入次数 | Medium | 贪心 | link |
1647 | link | 字符频次唯一的最小删除次数 | Medium | 哈希表 | link |
1665 | link | 完成所有任务的最少初始能量 | Hard | 贪心 | link |
下表则为LeetCode**版额外题库,如剑指Offer系列。
题目ID | 原题链接 | 题目全名 | 题目难度 | 题目类型 | 题解(点击下方) |
---|---|---|---|---|---|
剑指Offer 03 | link | 数组中重复的数字 | Easy | 数组 | link |
剑指Offer 04 | link | 二维数组中的查找 | Medium | 查找 | link |
剑指Offer 12 | link | 矩阵中的路径 | Medium | 回溯 | link |
剑指Offer 14 | link | 剪绳子 | Medium | 动态规划 | link |
剑指Offer 16 | link | 数值的整数次方 | Medium | 快速幂 | link |
剑指Offer 20 | link | 表示数值的字符串 | Medium | 字符串 | link |
剑指Offer 25 | link | 合并两个排序的链表 | Easy | 双指针 | link |
剑指Offer 26 | link | 树的子结构 | Medium | 二叉树 | link |
剑指Offer 27 | link | 二叉树的镜像 | Easy | 二叉树 | link |
剑指Offer 28 | link | 对称的二叉树 | Easy | 二叉树 | link |
剑指Offer 31 | link | 栈的压入、弹出序列 | Medium | 栈 | link |
剑指Offer 32 | link | 从上到下打印二叉树 | Medium | 二叉树 | link |
剑指Offer 34 | link | 二叉树中和为某一值的路径 | Medium | 回溯法 | link |
剑指Offer 35 | link | 复杂链表的复制 | Medium | 链表 | link |
剑指Offer 36 | link | 二叉搜索树与双向链表 | Medium | 二叉树 | link |
剑指Offer 38 | link | 字符串的排列 | Medium | 回溯 | link |
剑指Offer 39 | link | 数组中出现次数超过一半的数字 | Easy | Moore算法 | link |
剑指Offer 42 | link | 连续子数组的最大和 | Easy | 动态规划 | link |
剑指Offer 43 | link | 1~n 整数中 1 出现的次数 | Hard | 数学 | link |
剑指Offer 49 | link | 丑数 | Medium | 动态规划 | link |
剑指Offer 51 | link | 数组中的逆序对 | Hard | 归并/树状数组 | link |
剑指Offer 56-1 | link | 数组中数字出现的次数 | Medium | 位运算 | link |
剑指Offer 56-2 | link | 数组中数字出现的次数 | Medium | 位运算 | link |
剑指Offer 57 | link | 和为s的两个数字 | Easy | 双指针 | link |
剑指Offer 59 | link | 滑动窗口的最大值 | Medium | 单调队列 | link |
剑指Offer 62 | link | 圆圈中最后剩下的数字 | Easy | 动态规划 | link |
剑指Offer 63 | link | 股票的最大利润 | Medium | 动态规划 | link |
剑指Offer 66 | link | 构建乘积数组 | Medium | 动态规划 | link |
剑指Offer 69 | link | 山峰数组的顶部 | Easy | 分治法 | link |
下表则为LeetCode 热题 HOT 100 系列。
题目ID | 原题链接 | 题目全名 | 题目难度 | 题目类型 | 题解(点击下方) |
---|---|---|---|---|---|
0004 | link | 寻找两个正序数组的中位数 | Hard | 二分查找 | link |
0005 | link | 最长回文子串 | Medium | 动态规划、Manacher算法 | link |
0437 | link | 路径总和(三) | Medium | 前缀和 | link |
以下为不属于上述题库的其他典型题,这部分有的题目来自笔试或者面试原题,不提供原题链接。
题目ID | 原题链接 | 题目全名 | 题目难度 | 题目类型 | 题解(点击下方) |
---|---|---|---|---|---|
Other 01 | link | 子数组分割最大得分 | Hard | 数组 | link |
Other 02 | link | 不许ac | Easy | 编辑距离 | link |
Other 03 | link | 最大K乘积 | Medium | 动态规划 | link |
Other 04 | link | 9的倍数的子序列 | Hard | 动态规划 | link |