(1) 下面是本人在刷 LeetCode 算法题时制作的目录(持续更新),方便复习时查阅。
(2) 该目录主要是按照数学基础、数据结构、基础算法/思想和其它算法/思想进行分类,并且在每个题型下面又分子题型以及简单、中等和困难这三个级别,主要注意的是一个题目可能涉及多种算法/思想,所以它可能在目录中重复出现,并且有些题目可能会有一些扩展说明。下面题目中高亮显示的表明该题比较重要/常见,可以多加关注。
(3) 在刷题时,有一些思路是借鉴别人的,此处给出一位大佬的算法整理笔记,大家可以点击此处进行查看。
简单
LeetCode_位运算_简单_136.只出现一次的数字
LeetCode_位运算_简单_190.颠倒二进制位
LeetCode_位运算_简单_191.位1的个数
LeetCode_位运算_简单_231.2 的幂
LeetCode_位运算_简单_268.丢失的数字
LeetCode_位运算_简单_338.比特位计数
LeetCode_位运算_简单_405.数字转换为十六进制数
LeetCode_位运算_简单_461.汉明距离
LeetCode_位运算_中等_477.汉明距离总和
中等
LeetCode_位运算_中等_137.只出现一次的数字 II
LeetCode_位运算_中等_260.只出现一次的数字 III
LeetCode_位运算_中等_371. 两整数之和
简单
LeetCode_加一_简单_66.加一
LeetCode_杨辉三角_简单_118.杨辉三角
LeetCode_杨辉三角_简单_119.杨辉三角II
LeetCode_进制转换_简单_171.Excel 表列序号
LeetCode_因式分解_简单_263.丑数
LeetCode_博弈_简单_292.Nim 游戏
LeetCode_原地修改_简单_448. 找到所有数组中消失的数字
LeetCode_斐波那契数列_简单_509.斐波那契数
LeetCode_映射_简单_645.错误的集合
中等
LeetCode_旋转_中等_48.旋转图像
LeetCode_快速幂_递归_中等_50.Pow(x, n)
LeetCode_螺旋遍历_中等_54.螺旋矩阵
LeetCode_螺旋遍历_中等_59.螺旋矩阵 II
LeetCode_矩阵_中等_73.矩阵置零
LeetCode_格雷编码_中等_89.格雷编码
LeetCode_竖式计算_中等_166.分数到小数
LeetCode_阶乘_中等_172.阶乘后的零
LeetCode_素数筛_中等_204.计数质数
LeetCode_容斥原理_中等_223.矩形面积
LeetCode_平方根_中等_319.灯泡开关
LeetCode_排列组合_中等_357.统计各位数字都不同的数字个数
LeetCode_随机化_中等_380. O(1) 时间插入、删除和获取随机元素
LeetCode_位数统计_中等_400.第 N 位数字
LeetCode_等差数列_中等_413.等差数列划分
LeetCode_逆向思维_中等_453.最小操作次数使数组元素相等
LeetCode_模拟_中等_498.对角线遍历
LeetCode_模拟_中等_621. 任务调度器
LeetCode_博弈_中等_877.石子游戏
困难
LeetCode_数位枚举_困难_233.数字 1 的个数
LeetCode_矩形_困难_391.完美矩形
LeetCode_随机化_困难_710.黑名单中的随机数
简单
LeetCode_双指针_哈希表_简单_1.两数之和
LeetCode_双指针_简单_26.删除有序数组中的重复项
LeetCode_双指针_简单_27.移除元素
LeetCode_双指针_哈希集合_简单_202. 快乐数
LeetCode_双指针_简单_283.移动零
LeetCode_双指针_二分搜索_简单_392.判断子序列
中等
LeetCode_双指针_中等_11.盛最多水的容器
LeetCode_双指针_中等_15.三数之和
LeetCode_双指针_中等_16.最接近的三数之和
LeetCode_双指针_中等_18.四数之和
LeetCode_双指针_中等_31.下一个排列
LeetCode_双指针_中等_80.删除有序数组中的重复项II
LeetCode_双指针_中等_189. 轮转数组
LeetCode_双指针_二分搜索_中等_287. 寻找重复数
LeetCode_双指针_中等_611.有效三角形的个数
LeetCode_双指针_中等_633.平方数之和
LeetCode_双指针_优先级队列_中等_870.优势洗牌
LeetCode_数组_中等_915.分割数组
LeetCode_双指针_区间问题_中等_986.区间列表的交集
困难
LeetCode_双指针_困难_42.接雨水
简单
LeetCode_双指针_简单_21.合并两个有序链表
LeetCode_双指针_简单_83.删除排序链表中的重复元素
LeetCode_双指针_简单_141.环形链表
LeetCode_双指针_简单_160.相交链表
LeetCode_双指针_递归_简单_206. 反转链表
LeetCode_双指针_简单_234.回文链表
LeetCode_节点交换_简单_237.删除链表中的节点
LeetCode_双指针_简单_876.链表的中间结点
中等
LeetCode_双指针_中等_2.两数相加
LeetCode_双指针_中等_19.删除链表的倒数第 N 个结点
LeetCode_双指针_中等_61. 旋转链表
LeetCode_双指针_递归_中等_92.反转链表 II
LeetCode_双指针_中等_142.环形链表II
LeetCode_双指针_中等_328.奇偶链表
困难
LeetCode_双指针_优先级队列_困难_23.合并K个升序链表
LeetCode_双指针_递归_困难_25.K 个一组翻转链表
简单
LeetCode_栈_简单_20.有效的括号
LeetCode_栈_简单_155. 最小栈
LeetCode_栈_简单_232.用栈实现队列
中等
LeetCode_栈_中等_150. 逆波兰表达式求值
LeetCode_栈_中等_227.基本计算器 II(不含括号)
LeetCode_单调栈_中等_316.去除重复字母
LeetCode_单调栈_中等_456.132 模式
LeetCode_单调栈_中等_581.最短无序连续子数组
LeetCode_栈_中等_735.行星碰撞
LeetCode_单调栈_中等_739. 每日温度
困难
LeetCode_栈_动态规划_困难_32.最长有效括号
LeetCode_单调栈_困难_84.柱状图中最大的矩形
LeetCode_单调栈_困难_85.最大矩形
LeetCode_栈_困难_227.基本计算器(不含乘除)
LeetCode_栈_困难_394. 字符串解码
LeetCode_数据结构设计_困难_895. 最大频率栈
简单
LeetCode_队列_简单_225.用队列实现栈
中等
LeetCode_单调队列_滑动窗口_中等_239.滑动窗口最大值
LeetCode_优先级队列_中等_373.查找和最小的 K 对数字
LeetCode_优先级队列_692.前K个高频单词
LeetCode_优先级队列_双指针_中等_870.优势洗牌
困难
LeetCode_优先级队列_双指针_困难_23.合并K个升序链表
简单
LeetCode_字符串_简单_14.最长公共前缀
LeetCode_字符串_简单_28.实现strStr()
LeetCode_字符串_简单_58.最后一个单词的长度
LeetCode_字符串_简单_344.反转字符串
LeetCode_字符串_简单_387. 字符串中的第一个唯一字符
LeetCode_字符串_简单_412.Fizz Buzz
LeetCode_字符串_简单_551.学生出勤记录 I
LeetCode_字符串反转_简单_557. 反转字符串中的单词 III
中等
LeetCode_字符串_中等_6.Z 字形变换
LeetCode_字符串_中等_8.字符串转换整数 (atoi)
LeetCode_字符串_中等_43.字符串相乘
LeetCode_字符串_中等_49.字母异位词分组
LeetCode_字符串_中等_151.颠倒字符串中的单词
LeetCode_字符串_中等_647. 回文子串
简单
LeetCode_哈希集合_双指针_简单_202. 快乐数
中等
LeetCode_哈希表_中等_12.整数转罗马数字
LeetCode_哈希表_中等_13.罗马数字转整数
LeetCode_哈希表_中等_128. 最长连续序列
LeetCode_哈希表_滑动窗口_中等_187. 重复的DNA序列
LeetCode_原地哈希_中等_442.数组中重复的数据
LeetCode_哈希表_排序_中等_451.根据字符出现频率排序
LeetCode_哈希表_中等_454.四数相加 II
困难
LeetCode_哈希表_困难_149. 直线上最多的点数
简单
LeetCode_二叉树_简单_94.二叉树的中序遍历
LeetCode_二叉树_简单_100.相同的树
LeetCode_二叉树_简单_101. 对称二叉树
LeetCode_二叉树_动态规划_回溯算法_简单_104.二叉树的最大深度
LeetCode_二叉树_简单_111.二叉树的最小深度
LeetCode_二叉树_简单_144.二叉树的前序遍历
LeetCode_二叉树_简单_145.二叉树的后序遍历
LeetCode_二叉树_简单_226.翻转二叉树
LeetCode_二叉树_简单_501.二叉搜索树中的众数
LeetCode_二叉树_简单_543.二叉树的直径
LeetCode_二叉树_简单_617. 合并二叉树
LeetCode_二叉树_简单_965.单值二叉树
中等
LeetCode_二叉树_BFS_中等_102.二叉树的层序遍历
LeetCode_二叉树_BFS_中等_103. 二叉树的锯齿形层序遍历
LeetCode_二叉树_中等_105.从前序与中序遍历序列构造二叉树
LeetCode_二叉树_中等_106.从中序与后序遍历序列构造二叉树
LeetCode_二叉树_BFS_中等_107.二叉树的层序遍历 II
LeetCode_二叉树_中等_114.二叉树展开为链表
LeetCode_二叉树_中等_116.填充每个节点的下一个右侧节点指针
LeetCode_二叉树_中等_222.完全二叉树的节点个数
LeetCode_二叉树_中等_236.二叉树的最近公共祖先
LeetCode_二叉树_递归_动态规划_中等_337.打家劫舍 III
LeetCode_二叉树_前缀和_中等_437. 路径总和 III
LeetCode_二叉树_中等_515.在每个树行中找最大值
LeetCode_二叉树_中等_623.在二叉树中增加一行
LeetCode_二叉树_中等_652.寻找重复的子树
LeetCode_二叉树_中等_654.最大二叉树
困难
LeetCode_二叉树_困难_124. 二叉树中的最大路径和
LeetCode_二叉树_困难_297.二叉树的序列化与反序列化
简单
LeetCode_二叉搜索树_简单_108.将有序数组转换为二叉搜索树
LeetCode_二叉搜索树_简单_530.二叉搜索树的最小绝对差
LeetCode_二叉搜索树_简单_700.二叉搜索树中的搜索
中等
LeetCode_二叉搜索树_中等_95.不同的二叉搜索树 II
LeetCode_二叉搜索树_中等_96.不同的二叉搜索树
LeetCode_二叉搜索树_中等_98.验证二叉搜索树
LeetCode_二叉搜索树_中等_230.二叉搜索树中第K小的元素
LeetCode_二叉搜索树_中等_450.删除二叉搜索树中的节点
LeetCode_二叉搜索树_中等_538.把二叉搜索树转换为累加树
困难
LeetCode_二叉搜索树_困难_1373.二叉搜索子树的最大键值和
简单
LeetCode_多叉树_简单_559.N 叉树的最大深度
LeetCode_多叉树_简单_589.N 叉树的前序遍历
LeetCode_多叉树_简单_590.N 叉树的后序遍历
中等
LeetCode_多叉树_中等_429.N 叉树的层序遍历
中等
LeetCode_并查集_中等_130.被围绕的区域
LeetCode_并查集_中等_399.除法求值
LeetCode_并查集_中等_990.等式方程的可满足性
困难
LeetCode_并查集_困难_765.情侣牵手
中等
LeetCode_前缀树_中等_208. 实现 Trie (前缀树)
中等
LeetCode_DFS_中等_200.岛屿数量
LeetCode_DFS_环检测_中等_207.课程表
LeetCode_DFS_中等_386.字典序排数
LeetCode_DFS_中等_695.岛屿的最大面积
LeetCode_DFS_中等_1020.飞地的数量
LeetCode_DFS_中等_1254. 统计封闭岛屿的数目
LeetCode_DFS_中等_1905. 统计子岛屿
中等
LeetCode_BFS_二叉树_中等_102.二叉树的层序遍历
LeetCode_BFS_二叉树_BFS_中等_103. 二叉树的锯齿形层序遍历
LeetCode_BFS_二叉树_中等_107.二叉树的层序遍历 II
LeetCode_BFS_拓扑排序_中等_210. 课程表 II
LeetCode_BFS_中等_752. 打开转盘锁
困难
LeetCode_BFS_困难_773. 滑动谜题
中等
LeetCode_环检测_DFS_中等_207.课程表
LeetCode_拓扑排序_BFS_中等_210. 课程表 II
中等
LeetCode_二分图_中等_785. 判断二分图
LeetCode_二分图_中等_886. 可能的二分法
中等
LeetCode_Kruskal_中等_1584. 连接所有点的最小费用
中等
LeetCode_dijkstra算法_中等_743. 网络延迟时间
LeetCode_dijkstra算法_中等_1514. 概率最大的路径
LeetCode_dijkstra算法_中等_1631. 最小体力消耗路径
中等
LeetCode_图的遍历_中等_797. 所有可能的路径
中等
LeetCode_数据结构设计_中等_146. LRU 缓存
LeetCode_数据结构设计_中等_341. 扁平化嵌套列表迭代器
LeetCode_数据结构设计_中等_380. O(1) 时间插入、删除和获取随机元素
困难
LeetCode_数据结构设计_困难_460. LFU 缓存
LeetCode_数据结构设计_困难_895. 最大频率栈
简单
LeetCode_排序_简单_88.合并两个有序数组
LeetCode_排序_简单_217.存在重复元素
LeetCode_排序_简单_242.有效的字母异位词
LeetCode_排序_简单_349.两个数组的交集
LeetCode_排序_简单_350.两个数组的交集II
中等
LeetCode_排序_中等_75.颜色分类
LeetCode_排序_中等_147.对链表进行插入排序
LeetCode_排序_中等_148.排序链表
LeetCode_排序_中等_179.最大数
LeetCode_排序_中等_215.数组中的第K个最大元素
LeetCode_排序_中等_274.H 指数
LeetCode_排序_中等_324.摆动排序 II
LeetCode_排序_中等_347.前K个高频元素
LeetCode_排序_中等_406. 根据身高重建队列
LeetCode_排序_哈希表_中等_451.根据字符出现频率排序
困难
LeetCode_排序_困难_164.最大间距
简单
LeetCode_二分搜索_简单_35.搜索插入位置
LeetCode_二分搜索_简单_69. x 的平方根
LeetCode_二分搜索_简单_367.有效的完全平方数
LeetCode_二分搜索_双指针_简单_392.判断子序列
LeetCode_二分搜索_简单_704.二分查找
中等
LeetCode_二分搜索_中等_33.搜索旋转排序数组
LeetCode_二分搜索_中等_34.在排序数组中查找元素的第一个和最后一个位置
LeetCode_二分搜索_中等_74.搜索二维矩阵
LeetCode_二分搜索_中等_81.搜索旋转排序数组 II
LeetCode_二分搜索_中等_153.寻找旋转排序数组中的最小值
LeetCode_二分搜索_前缀和_滑动窗口_中等_209.长度最小的子数组
LeetCode_二分搜索_中等_240. 搜索二维矩阵 II
LeetCode_二分搜索_双指针_中等_287. 寻找重复数
LeetCode_二分搜索_动态规划_耐心排序_中等_300.最长递增子序列
LeetCode_二分搜索_中等_378. 有序矩阵中第 K 小的元素
LeetCode_二分搜索_中等_540.有序数组中的单一元素
LeetCode_二分搜索_滑动窗口_中等_713.乘积小于 K 的子数组
LeetCode_二分搜索_中等_875.爱吃香蕉的珂珂
LeetCode_二分搜索_中等_1011.在 D 天内送达包裹的能力
困难
LeetCode_二分搜索_困难_4.寻找两个正序数组的中位数
LeetCode_二分搜索_动态规划_困难_354.俄罗斯套娃信封问题
LeetCode_二分搜索_数学_阶乘_困难_793.阶乘函数后 K 个零
简单
LeetCode_递归_双指针_简单_206. 反转链表
中等
LeetCode_递归_回溯算法_中等_22.括号生成
LeetCode_递归_快速幂_中等_50.Pow(x, n)
LeetCode_递归_双指针_中等_92.反转链表 II
LeetCode_递归_动态规划_二叉树_中等_337.打家劫舍 III
LeetCode_递归_中等_397.整数替换
困难
LeetCode_递归_双指针_困难_25.K 个一组翻转链表
简单
LeetCode_回溯_简单_17.电话号码的字母组合
LeetCode_回溯_动态规划_简单_104.二叉树的最大深度
中等
LeetCode_回溯_递归_中等_22.括号生成
LeetCode_回溯_中等_39.组合总和
LeetCode_回溯_中等_40.组合总和 II
LeetCode_回溯_中等_46.全排列
LeetCode_回溯_中等_77.组合
LeetCode_回溯_中等_78.子集
LeetCode_回溯_中等_79.单词搜索
LeetCode_回溯_中等_90.子集II
LeetCode_回溯_动态规划_中等_131.分割回文串
LeetCode_回溯_中等_216.组合总和 III
LeetCode_回溯_中等_473.火柴拼正方形
LeetCode_回溯_中等_491.递增子序列
LeetCode_回溯_中等_494.目标和
LeetCode_回溯_中等_698.划分为k个相等的子集
困难
LeetCode_回溯_递归_困难_37.解数独
LeetCode_回溯_困难_51.N 皇后
LeetCode_回溯_困难_52.N皇后 II
LeetCode_回溯_困难_301. 删除无效的括号
简单
LeetCode_动态规划_简单_53.最大子序和
LeetCode_动态规划_简单_70.爬楼梯
LeetCode_动态规划_回溯算法_二叉树_简单_104.二叉树的最大深度
LeetCode_动态规划_简单_674.最长连续递增序列
中等
LeetCode_动态规划_中等_45.跳跃游戏II
LeetCode_动态规划_中等_91. 解码方法
LeetCode_动态规划_中等_139. 单词拆分
LeetCode_动态规划_中等_152. 乘积最大子数组
LeetCode_动态规划_中等_198.打家劫舍
LeetCode_动态规划_中等_213.打家劫舍 II
LeetCode_动态规划_中等_264.丑数 II
LeetCode_动态规划_中等_279. 完全平方数
LeetCode_动态规划_二分搜索_耐心排序_中等_300.最长递增子序列
LeetCode_动态规划_中等_313.超级丑数
LeetCode_动态规划_中等_322.零钱兑换
LeetCode_动态规划_递归_二叉树_中等_337.打家劫舍 III
LeetCode_动态规划_343.整数拆分
LeetCode_动态规划_中等_368.最大整除子集
LeetCode_动态规划_中等_377.组合总和 Ⅳ
LeetCode_动态规划_中等_673.最长递增子序列的个数
LeetCode_动态规划_中等_740.删除并获得点数
困难
LeetCode_动态规划_栈_困难_32.最长有效括号
LeetCode_动态规划_二分搜索_困难_354.俄罗斯套娃信封问题
简单
LeetCode_动态规划_简单_121.买卖股票的最佳时机
中等
LeetCode_动态规划_中等_5.最长回文子串
LeetCode_动态规划_中等_62.不同路径
LeetCode_动态规划_中等_63.不同路径 II
LeetCode_动态规划_中等_64.最小路径和
LeetCode_动态规划_中等_97.交错字符串
LeetCode_动态规划_中等_120.三角形最小路径和
LeetCode_动态规划_中等_122.买卖股票的最佳时机 II
LeetCode_动态规划_中等_221. 最大正方形
LeetCode_动态规划_回溯_中等_131.分割回文串
LeetCode_动态规划_中等_309.最佳买卖股票时机含冷冻期
LeetCode_动态规划_中等_416.分割等和子集
LeetCode_动态规划_中等_518.零钱兑换 II
LeetCode_动态规划_中等_583.两个字符串的删除操作
LeetCode_动态规划_中等_688.骑士在棋盘上的概率
LeetCode_动态规划_中等_714.买卖股票的最佳时机含手续费
LeetCode_动态规划_中等_718.最长重复子数组
LeetCode_动态规划_中等_931.下降路径最小和
LeetCode_动态规划_中等_1143.最长公共子序列
LeetCode_动态规划_中等_1277. 统计全为 1 的正方形子矩阵
困难
LeetCode_动态规划_困难_10.正则表达式匹配
LeetCode_动态规划_困难_44.通配符匹配
LeetCode_动态规划_困难_72.编辑距离
LeetCode_动态规划_困难_123.买卖股票的最佳时机 III
LeetCode_动态规划_困难_188.买卖股票的最佳时机 IV
LeetCode_动态规划_困难_312.戳气球
LeetCode_动态规划_困难_552.学生出勤记录 II
LeetCode_动态规划_困难_887.鸡蛋掉落
中等
LeetCode_贪心算法_中等_55.跳跃游戏
LeetCode_贪心算法_中等_134. 加油站
LeetCode_贪心算法_中等_334. 递增的三元子序列
LeetCode_贪心算法_区间问题_中等_435.无重叠区间
LeetCode_贪心算法_中等_665.非递减数列
LeetCode_贪心算法_中等_738.单调递增的数字
LeetCode_贪心算法_区间问题_中等_1024.视频拼接
简单
LeetCode_滑动窗口_简单_219. 存在重复元素 II
LeetCode_滑动窗口_简单_643.子数组最大平均数 I
中等
LeetCode_滑动窗口_中等_3.无重复字符的最长子串
LeetCode_滑动窗口_哈希表_中等_187. 重复的DNA序列
LeetCode_滑动窗口_前缀和_二分搜索_中等_209.长度最小的子数组
LeetCode_滑动窗口_中等_220.存在重复元素III
LeetCode_滑动窗口_单调队列_中等_239.滑动窗口最大值
LeetCode_滑动窗口_中等_395.至少有 K 个重复字符的最长子串
LeetCode_滑动窗口_中等_424.替换后的最长重复字符
LeetCode_滑动窗口_中等_438.找到字符串中所有字母异位词
LeetCode_滑动窗口_中等_567.字符串的排列
LeetCode_滑动窗口_二分搜索_中等_713.乘积小于 K 的子数组
困难
LeetCode_滑动窗口_困难_30.串联所有单词的子串
LeetCode_滑动窗口_困难_76.最小覆盖子串
前缀和主要适用的场景是原数组在不会被修改的前提下,频繁地对其某个区间的累加和进行查询操作。
简单
LeetCode_前缀和_简单_303.区域和检索 - 数组不可变
中等
LeetCode_前缀和_二分搜索_滑动窗口_中等_209.长度最小的子数组
LeetCode_左右乘积列表_中等_238. 除自身以外数组的乘积
LeetCode_前缀和_中等_304.二维区域和检索 - 矩阵不可变
LeetCode_前缀和_二叉树_中等_437. 路径总和 III
LeetCode_前缀和_哈希表_中等_523.连续的子数组和
LeetCode_前缀和_哈希表_中等_525.连续数组
LeetCode_前缀和_中等_560.和为 K 的子数组
困难
LeetCode_前缀和_困难_862.和至少为 K 的最短子数组
差分数组主要适用的场景是频繁对原数组的某个区间的元素进行增减。
中等
LeetCode_差分数组_中等_1094.拼车
LeetCode_差分数组_中等_1109.航班预订统计
中等
LeetCode_区间问题_中等_56.合并区间
LeetCode_区间问题_中等_57.插入区间
LeetCode_区间问题_贪心算法_中等_435.无重叠区间
LeetCode_区间问题_中等_452.用最少数量的箭引爆气球
LeetCode_区间问题_中等_795.区间子数组个数
LeetCode_区间问题_双指针_中等_986.区间列表的交集
LeetCode_区间问题_中等_1024.视频拼接
LeetCode_区间问题_中等_1288.删除被覆盖区间
LeetCode_区间问题_中等_1834.单线程 CPU
简单
LeetCode_Boyer-Moore投票算法_简单_169.多数元素
中等
LeetCode_Boyer-Moore 投票算法_中等_229.求众数 II
中等
LeetCode_洗牌算法_中等_384.打乱数组