- 1.数学基础
- 1.1.位运算
- 1.2.其它
- 2.数据结构
- 2.1.线性表
- 2.1.1.数组(双指针)
- 2.1.2.链表(双指针)
- 2.1.3.栈
- 2.1.4.队列
- 2.1.5.字符串
- 2.1.6.哈希表/哈希集合
- 2.2.树
- 2.2.2.二叉树
- 2.2.2.1.普通二叉树
- 2.2.2.2.二叉搜索树
- 2.2.2.3.平衡二叉树
- 2.2.3.多叉树
- 2.2.3.并查集
- 2.2.4.前缀树/字典树
- 2.2.5.线段树
- 2.3.图
- 2.3.1.BFS
- 2.3.2.DFS
- 2.3.3.拓扑排序
- 2.3.4.二分图
- 2.3.5.最小生成树
- 2.3.6.最短路径
- 2.3.7.图的遍历
- 2.4.数据结构设计
- 3.基础算法/思想
- 3.1.排序
- 3.2.二分搜索
- 3.3.递归
- 3.4.回溯算法
- 3.5.动态规划
- 3.5.1.一维动态规划
- 3.5.2.多维动态规划
- 3.6.贪心算法
- 4.其它算法/思想
- 4.1.滑动窗口
- 4.2.前缀和
- 4.3.差分数组
- 4.4.区间问题
- 4.5.Boyer-Moore 投票算法
- 4.6.洗牌算法
(1)下面是本人在刷 LeetCode 算法题时制作的目录(持续更新),方便复习时查阅。 (2)该目录主要是按照数学基础、数据结构、基础算法/思想和其它算法/思想进行分类,并且在每个题型下面又分子题型以及简单、中等和困难这三个级别,主要注意的是一个题目可能涉及多种算法/思想,所以它可能在目录中重复出现,并且有些题目可能会有一些扩展说明。 (3)下面题目中用✨标记的表明该题(包括文章内部给出的相关题目)比较重要或是在面试中经常出现,可以多加关注。 (4)在刷题时,有一些思路是借鉴别人的,此处给出一位大佬的算法整理笔记,大家可以点击此处进行查看。 (5)LeetCode 中有些题目的难度可能会随着时间而变化,所以下面题目的难度可能无法与 LeetCode 中一一对应。 (6)此外,有关数据结构与算法的相关知识可以查看数据结构与算法这一专栏。
1.数学基础 1.1.位运算简单 ✨LeetCode_位运算_简单_136.只出现一次的数字 LeetCode_位运算_简单_190.颠倒二进制位 LeetCode_位运算_简单_191.位1的个数 LeetCode_位运算_简单_231.2 的幂 LeetCode_位运算_简单_268.丢失的数字 LeetCode_位运算_动态规划_简单_338.比特位计数 LeetCode_位运算_简单_405.数字转换为十六进制数 LeetCode_位运算_简单_461.汉明距离 LeetCode_位运算_简单_1684.统计一致字符串的数目
中等 LeetCode_位运算_中等_137.只出现一次的数字 II LeetCode_位运算_中等_201.数字范围按位与 LeetCode_位运算_中等_260.只出现一次的数字 III LeetCode_位运算_中等_318.最大单词长度乘积 LeetCode_位运算_中等_371.两整数之和 LeetCode_位运算_中等_477.汉明距离总和 LeetCode_位运算_递归_中等_779.第K个语法符号
困难 LeetCode_位运算_困难_805.数组的均值分割 LeetCode_位运算_困难_982.按位与为零的三元组
1.2.其它简单 LeetCode_加一_简单_66.加一 ✨LeetCode_杨辉三角_简单_118.杨辉三角 LeetCode_杨辉三角_简单_119.杨辉三角II LeetCode_进制转换_简单_171.Excel 表列序号 LeetCode_因式分解_简单_263.丑数 LeetCode_博弈_简单_292.Nim 游戏 LeetCode_原地修改_简单_448.找到所有数组中消失的数字 LeetCode_数学_简单_507.完美数 LeetCode_斐波那契数列_简单_509.斐波那契数 LeetCode_映射_简单_645.错误的集合 LeetCode_模拟_简单_1342.将数字变成 0 的操作次数
中等 ✨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_数学分析_中等_754.到达终点数字 LeetCode_数学归纳_中等_775.全局倒置与局部倒置 LeetCode_模拟_中等_799.香槟塔 LeetCode_博弈_中等_877.石子游戏 LeetCode_容斥原理_二分搜索_中等_1201.丑数 III LeetCode_进制转换_中等_1780.判断一个数字是否可以表示成三的幂的和
困难 LeetCode_数位枚举_困难_233.数字 1 的个数 LeetCode_矩形_困难_391.完美矩形 LeetCode_随机化_困难_710.黑名单中的随机数 LeetCode_容斥原理_二分搜索_困难_878.第 N 个神奇数字 LeetCode_数学推导_困难_891.子序列宽度之和
2.数据结构 2.1.线性表 2.1.1.数组(双指针)简单 ✨LeetCode_双指针_哈希表_简单_1.两数之和 LeetCode_双指针_简单_26.删除有序数组中的重复项 LeetCode_双指针_简单_27.移除元素 LeetCode_双指针_哈希集合_简单_202. 快乐数 LeetCode_双指针_简单_283.移动零 LeetCode_双指针_二分搜索_简单_392.判断子序列 LeetCode_数组_简单_896.单调数列 LeetCode_双指针_简单_1332.删除回文子序列
中等 ✨LeetCode_双指针_中等_11.盛最多水的容器 LeetCode_双指针_中等_15.三数之和 LeetCode_双指针_中等_16.最接近的三数之和 LeetCode_双指针_中等_18.四数之和 ✨LeetCode_双指针_中等_31.下一个排列 LeetCode_数组_中等_36.有效的数独 LeetCode_双指针_中等_80.删除有序数组中的重复项 II LeetCode_双指针_中等_167.两数之和 II - 输入有序数组 ✨LeetCode_双指针_中等_189.轮转数组 ✨LeetCode_双指针_二分搜索_中等_287.寻找重复数 LeetCode_数组_中等_289.生命游戏 LeetCode_双指针_中等_443.压缩字符串 LeetCode_双指针_中等_481.神奇字符串 LeetCode_双指针_排序_中等_524.通过删除字母匹配到字典里最长单词 LeetCode_双指针_中等_611.有效三角形的个数 LeetCode_双指针_中等_633.平方数之和 LeetCode_双指针_二分搜索_排序_中等_658.找到 K 个最接近的元素 LeetCode_双指针_中等_777.在LR字符串中交换相邻字符 LeetCode_多指针_二分搜索_中等_792.匹配子序列的单词数 LeetCode_双指针_中等_809.情感丰富的文字 LeetCode_双指针_优先级队列_中等_870.优势洗牌 LeetCode_模拟_中等_874.模拟行走机器人 LeetCode_数组_中等_915.分割数组 LeetCode_双指针_区间问题_中等_986.区间列表的交集 LeetCode_数组_中等_1620.网络信号最好的坐标 LeetCode_双指针_中等_1764.通过连接另一个数组的子数组得到一个数组 LeetCode_双指针_中等_1781.所有子字符串美丽值之和
困难 LeetCode_双指针_困难_42.接雨水 LeetCode_数组_困难_135.分发糖果 LeetCode_数组_困难_927.三等分
2.1.2.链表(双指针)简单 ✨LeetCode_双指针_简单_21.合并两个有序链表 LeetCode_双指针_简单_83.删除排序链表中的重复元素 ✨LeetCode_双指针_简单_141.环形链表 ✨LeetCode_双指针_简单_160.相交链表 ✨LeetCode_双指针_递归_简单_206.反转链表 LeetCode_双指针_简单_234.回文链表 LeetCode_节点交换_简单_237.删除链表中的节点 LeetCode_双指针_简单_876.链表的中间结点
中等 LeetCode_双指针_中等_2.两数相加 LeetCode_双指针_中等_19.删除链表的倒数第 N 个结点 ✨LeetCode_双指针_中等_24.两两交换链表中的节点 ✨LeetCode_双指针_中等_61.旋转链表 LeetCode_双指针_中等_82.删除排序链表中的重复元素 II LeetCode_双指针_中等_86.分隔链表 LeetCode_双指针_递归_中等_92.反转链表 II LeetCode_双指针_中等_142.环形链表 II ✨LeetCode_双指针_中等_143.重排链表 LeetCode_双指针_中等_328.奇偶链表 LeetCode_链表_中等_445.两数相加 II
困难 ✨LeetCode_双指针_递归_困难_25.K 个一组翻转链表
2.1.3.栈有关单调栈的相关具体知识可以参考【数据结构】单调栈这篇文章。
简单 LeetCode_栈_简单_20.有效的括号 LeetCode_栈_简单_155.最小栈 LeetCode_栈_简单_232.用栈实现队列 LeetCode_单调栈_简单_496.下一个更大元素 I
中等 LeetCode_栈_中等_150.逆波兰表达式求值 LeetCode_栈_中等_227.基本计算器 II(不含括号) LeetCode_单调栈_中等_316.去除重复字母 LeetCode_单调栈_中等_456.132 模式 LeetCode_单调栈_中等_503.下一个更大元素 II LeetCode_单调栈_中等_581.最短无序连续子数组 ✨LeetCode_栈_中等_735.行星碰撞 ✨LeetCode_单调栈_中等_739.每日温度 LeetCode_栈_中等_856.括号的分数 LeetCode_单调栈_中等_901.股票价格跨度 LeetCode_单调栈_中等_907.子数组的最小值之和 LeetCode_栈_中等_921.使括号有效的最少添加 LeetCode_栈_中等_1003.检查替换后的词是否有效 LeetCode_单调栈_中等_1019.链表中的下一个更大节点 LeetCode_栈_中等_1441.用栈操作构建数组
困难 LeetCode_栈_动态规划_困难_32.最长有效括号 ✨LeetCode_单调栈_困难_84.柱状图中最大的矩形 LeetCode_单调栈_困难_85.最大矩形 LeetCode_栈_困难_227.基本计算器(不含乘除) ✨LeetCode_栈_困难_394.字符串解码 LeetCode_数据结构设计_困难_895.最大频率栈 LeetCode_栈_困难_1106.解析布尔表达式
2.1.4.队列简单 LeetCode_队列_简单_225.用队列实现栈
中等 ✨LeetCode_单调队列_滑动窗口_中等_239.滑动窗口最大值 LeetCode_优先级队列_中等_373.查找和最小的 K 对数字 LeetCode_双端队列_贪心_中等_402.移掉 K 位数字 LeetCode_优先级队列_回溯_659.分割数组为连续子序列 LeetCode_优先级队列_692.前K个高频单词 LeetCode_优先级队列_双指针_中等_870.优势洗牌
困难 ✨LeetCode_优先级队列_困难_23.合并 K 个升序链表
2.1.5.字符串简单 LeetCode_字符串_简单_14.最长公共前缀 LeetCode_字符串_简单_28.实现strStr() LeetCode_字符串_简单_58.最后一个单词的长度 LeetCode_字符串_简单_67.二进制求和 LeetCode_字符串_简单_344.反转字符串 LeetCode_字符串_简单_387.字符串中的第一个唯一字符 LeetCode_字符串_简单_412.Fizz Buzz LeetCode_字符串_简单_415.字符串相加 LeetCode_字符串_简单_551.学生出勤记录 I LeetCode_字符串反转_简单_557.反转字符串中的单词 III
中等 LeetCode_字符串_中等_6.Z 字形变换 LeetCode_字符串_中等_8.字符串转换整数 (atoi) LeetCode_字符串_中等_43.字符串相乘 ✨LeetCode_字符串_中等_49.字母异位词分组 LeetCode_字符串_中等_151.颠倒字符串中的单词 LeetCode_字符串_中等_165.比较版本号 LeetCode_字符串_中等_468.验证 IP 地址 LeetCode_字符串_中等_647.回文子串 LeetCode_字符串_中等_816.模糊坐标 LeetCode_字符串_中等_1657.确定两个字符串是否接近
2.1.6.哈希表/哈希集合简单 LeetCode_哈希集合_双指针_简单_202.快乐数 LeetCode_哈希表_简单_205.同构字符串 LeetCode_哈希表_简单_290.单词规律 LeetCode_哈希表_简单_594.最长和谐子序列 LeetCode_哈希表_简单_599.两个列表的最小索引总和 LeetCode_哈希表_哈希集合_简单_819.最常见的单词
中等 LeetCode_哈希表_中等_12.整数转罗马数字 LeetCode_哈希表_中等_13.罗马数字转整数 ✨LeetCode_哈希表_中等_128.最长连续序列 LeetCode_哈希表_滑动窗口_中等_187.重复的DNA序列 ✨LeetCode_原地哈希_中等_442.数组中重复的数据 LeetCode_哈希表_排序_中等_451.根据字符出现频率排序 LeetCode_哈希表_中等_454.四数相加 II LeetCode_哈希集合_排序_前缀树_中等_720.词典中最长的单词 LeetCode_哈希表_中等_811.子域名访问计数 LeetCode_哈希表_中等_817.链表组件 LeetCode_哈希表_中等_916.单词子集
困难 ✨LeetCode_原地哈希_困难_41.缺失的第一个正数 LeetCode_哈希表_困难_149.直线上最多的点数 LeetCode_哈希表_前缀和_困难_2488.统计中位数为 K 的子数组
2.2.树 2.2.2.二叉树 2.2.2.1.普通二叉树✨有关二叉树遍历的相关具体知识可以参考【算法】二叉树遍历这篇文章。
简单 ✨LeetCode_二叉树_简单_94.二叉树的中序遍历 LeetCode_二叉树_简单_100.相同的树 ✨LeetCode_二叉树_简单_101.对称二叉树 LeetCode_二叉树_动态规划_回溯算法_简单_104.二叉树的最大深度 LeetCode_二叉树_简单_111.二叉树的最小深度 ✨LeetCode_二叉树_简单_112.路径总和 ✨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_二叉树_中等_113.路径总和 II ✨LeetCode_二叉树_中等_114.二叉树展开为链表 LeetCode_二叉树_中等_116.填充每个节点的下一个右侧节点指针 LeetCode_二叉树_BFS_中等_117.填充每个节点的下一个右侧节点指针 II LeetCode_二叉树_DFS_中等_129.求根节点到叶节点数字之和 ✨LeetCode_二叉树_BFS_中等_199.二叉树的右视图 LeetCode_二叉树_中等_222.完全二叉树的节点个数 ✨LeetCode_二叉树_中等_236.二叉树的最近公共祖先 LeetCode_二叉树_递归_动态规划_中等_337.打家劫舍 III ✨LeetCode_二叉树_前缀和_中等_437.路径总和 III LeetCode_二叉树_中等_515.在每个树行中找最大值 LeetCode_二叉树_中等_623.在二叉树中增加一行 LeetCode_二叉树_中等_652.寻找重复的子树 LeetCode_二叉树_中等_654.最大二叉树 LeetCode_二叉树_中等_剑指 Offer 26.树的子结构
困难 ✨LeetCode_二叉树_困难_124.二叉树中的最大路径和 ✨LeetCode_二叉树_困难_297.二叉树的序列化与反序列化
2.2.2.2.二叉搜索树简单 ✨LeetCode_二叉搜索树_简单_108.将有序数组转换为二叉搜索树 LeetCode_二叉搜索树_简单_530.二叉搜索树的最小绝对差 LeetCode_二叉搜索树_简单_700.二叉搜索树中的搜索
中等 LeetCode_二叉搜索树_中等_95.不同的二叉搜索树 II LeetCode_二叉搜索树_中等_96.不同的二叉搜索树 ✨LeetCode_二叉搜索树_中等_98.验证二叉搜索树 ✨LeetCode_二叉搜索树_中等_230.二叉搜索树中第K小的元素 LeetCode_二叉搜索树_中等_235.二叉搜索树的最近公共祖先 LeetCode_二叉搜索树_中等_450.删除二叉搜索树中的节点 LeetCode_二叉搜索树_中等_538.把二叉搜索树转换为累加树
困难 LeetCode_二叉搜索树_困难_1373.二叉搜索子树的最大键值和
2.2.2.3.平衡二叉树简单 LeetCode_二叉平衡树_简单_110.平衡二叉树
2.2.3.多叉树简单 LeetCode_多叉树_简单_559.N 叉树的最大深度 LeetCode_多叉树_简单_589.N 叉树的前序遍历 LeetCode_多叉树_简单_590.N 叉树的后序遍历
中等 LeetCode_多叉树_中等_429.N 叉树的层序遍历
2.2.3.并查集有关并查集的相关具体知识可以参考【数据结构】并查集这篇文章。
中等 LeetCode_并查集_DFS_中等_130.被围绕的区域 LeetCode_并查集_中等_399.除法求值 ✨LeetCode_并查集_DFS_BFS_中等_547.省份数量 LeetCode_并查集_中等_990.等式方程的可满足性
困难 LeetCode_并查集_困难_765.情侣牵手
2.2.4.前缀树/字典树有关前缀树的相关具体知识可以参考【数据结构】前缀树/字典树这篇文章。
中等 ✨LeetCode_前缀树_中等_208.实现 Trie (前缀树) LeetCode_前缀树_数据结构设计_中等_211.添加与搜索单词 - 数据结构设计 LeetCode_前缀树_贪心算法_中等_421.数组中两个数的最大异或值 LeetCode_前缀树_中等_648.单词替换 LeetCode_前缀树_数据结构设计_中等_677.键值映射 LeetCode_前缀树_排序_哈希集合_中等_720.词典中最长的单词 LeetCode_前缀树_中等_1268.搜索推荐系统
困难 LeetCode_前缀树_困难_212.单词搜索 II LeetCode_前缀树_困难_1803.统计异或值在范围内的数对有多少
2.2.5.线段树困难 LeetCode_线段树_困难_2569.更新数组后处理求和查询
2.3.图 2.3.1.BFS有关 BFS 的相关具体知识可以参考【算法】广度优先遍历 (BFS)这篇文章。
简单 LeetCode_BFS_DFS_简单_1971.寻找图中是否存在路径
中等 LeetCode_BFS_二叉树_中等_102.二叉树的层序遍历 LeetCode_BFS_二叉树_BFS_中等_103.二叉树的锯齿形层序遍历 LeetCode_BFS_二叉树_中等_107.二叉树的层序遍历 II LeetCode_BFS_二叉树_中等_117.填充每个节点的下一个右侧节点指针 II ✨LeetCode_BFS_拓扑排序_中等_210.课程表 II LeetCode_BFS_中等_542.01 矩阵 LeetCode_BFS_并查集_DFS_中等_547.省份数量 LeetCode_BFS_中等_752. 打开转盘锁 LeetCode_BFS_回溯_中等_784.字母大小写全排列 LeetCode_BFS_中等_934.最短的桥 ✨LeetCode_多源 BFS_中等_994.腐烂的橘子 LeetCode_BFS_DFS_中等_1376.通知所有员工所需的时间 LeetCode_BFS_中等_1466.重新规划路线
困难 LeetCode_BFS_困难_773.滑动谜题 LeetCode_BFS_困难_864.获取所有钥匙的最短路径
2.3.2.DFS有关 DFS 的相关具体知识可以参考【算法】深度优先搜索 (DFS)这篇文章。
简单 LeetCode_DFS_BFS_简单_1971.寻找图中是否存在路径
中等 LeetCode_DFS_并查集_中等_130.被围绕的区域 LeetCode_DFS_中等_200.岛屿数量 LeetCode_DFS_环检测_中等_207.课程表 LeetCode_DFS_中等_386.字典序排数 LeetCode_DFS_并查集_BFS_中等_547.省份数量 LeetCode_DFS_中等_695.岛屿的最大面积 LeetCode_DFS_中等_1020.飞地的数量 LeetCode_DFS_中等_1254.统计封闭岛屿的数目 LeetCode_DFS_BFS_中等_1376.通知所有员工所需的时间 LeetCode_DFS_中等_1905.统计子岛屿 LeetCode_DFS_中等_面试题 16.19.水域大小
困难 LeetCode_DFS_困难_1377.T 秒后青蛙的位置
2.3.3.拓扑排序有关拓扑排序的相关具体知识可以参考【算法】拓扑排序这篇文章。
中等 ✨LeetCode_环检测_DFS_中等_207.课程表 ✨LeetCode_拓扑排序_BFS_中等_210.课程表 II
2.3.4.二分图有关二分图判定的相关具体知识可以参考【算法】二分图判定这篇文章。
中等 LeetCode_二分图_中等_785.判断二分图 LeetCode_二分图_中等_886.可能的二分法
2.3.5.最小生成树有关克鲁斯卡尔算法的相关具体知识可以参考【算法】克鲁斯卡尔 (Kruskal) 算法这篇文章。
中等 LeetCode_Kruskal_中等_1584.连接所有点的最小费用
2.3.6.最短路径中等 LeetCode_dijkstra算法_中等_743.网络延迟时间 LeetCode_dijkstra算法_中等_1514.概率最大的路径 LeetCode_dijkstra算法_中等_1631.最小体力消耗路径
困难 LeetCode_dijkstra 算法_困难_882.细分图中的可到达节点
2.3.7.图的遍历中等 LeetCode_图的遍历_中等_797. 所有可能的路径
2.4.数据结构设计中等 ✨LeetCode_数据结构设计_中等_146.LRU 缓存 LeetCode_数据结构设计_中等_173.二叉搜索树迭代器 LeetCode_数据结构设计_前缀树_中等_211.添加与搜索单词 - 数据结构设计 LeetCode_数据结构设计_中等_341.扁平化嵌套列表迭代器 LeetCode_数据结构设计_中等_380.O(1) 时间插入、删除和获取随机元素 LeetCode_数据结构设计_前缀树_中等_677.键值映射
困难 ✨LeetCode_数据结构设计_困难_295.数据流的中位数 ✨LeetCode_数据结构设计_困难_460.LFU 缓存 LeetCode_数据结构设计_困难_895.最大频率栈
3.基础算法/思想 3.1.排序有关排序的相关具体知识可以参考【算法】内部排序这篇文章。
简单 ✨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_排序_快速选择_中位数_中等_462.最小操作次数使数组元素相等 II LeetCode_排序_双指针_中等_524.通过删除字母匹配到字典里最长单词 LeetCode_排序_二分搜索_双指针_中等_658.找到 K 个最接近的元素 LeetCode_排序_哈希集合_前缀树_中等_720.词典中最长的单词 LeetCode_排序_中等_791.自定义字符串排序 LeetCode_排序_中等_912.排序数组
困难 LeetCode_排序_困难_164.最大间距
3.2.二分搜索有关二分搜索的相关具体知识可以参考【算法】二分搜索这篇文章。
简单 LeetCode_二分搜索_简单_35.搜索插入位置 LeetCode_二分搜索_简单_69. x 的平方根 LeetCode_二分搜索_简单_367.有效的完全平方数 LeetCode_二分搜索_双指针_简单_392.判断子序列 LeetCode_二分搜索_简单_704.二分查找
中等 ✨LeetCode_二分搜索_中等_33.搜索旋转排序数组 ✨LeetCode_二分搜索_中等_34.在排序数组中查找元素的第一个和最后一个位置 LeetCode_二分搜索_中等_74.搜索二维矩阵 LeetCode_二分搜索_中等_81.搜索旋转排序数组 II ✨LeetCode_二分搜索_中等_153.寻找旋转排序数组中的最小值 LeetCode_二分搜索_困难_154.寻找旋转排序数组中的最小值 II LeetCode_二分搜索_中等_162.寻找峰值 LeetCode_二分搜索_前缀和_滑动窗口_中等_209.长度最小的子数组 LeetCode_二分搜索_中等_240.搜索二维矩阵 II LeetCode_二分搜索_双指针_中等_287. 寻找重复数 LeetCode_二分搜索_动态规划_耐心排序_中等_300.最长递增子序列 LeetCode_二分搜索_中等_378. 有序矩阵中第 K 小的元素 LeetCode_二分搜索_中等_436.寻找右区间 LeetCode_二分搜索_中等_540.有序数组中的单一元素 LeetCode_二分搜索_双指针_排序_中等_658.找到 K 个最接近的元素 LeetCode_二分搜索_滑动窗口_中等_713.乘积小于 K 的子数组 LeetCode_二分搜索_多指针_中等_792.匹配子序列的单词数 LeetCode_二分搜索_中等_875.爱吃香蕉的珂珂 LeetCode_二分搜索_中等_1011.在 D 天内送达包裹的能力 LeetCode_二分搜索_容斥原理_中等_1201.丑数 III LeetCode_二分搜索_贪心_中等_1802.有界数组中指定下标处的最大值
困难 LeetCode_二分搜索_困难_4.寻找两个正序数组的中位数 LeetCode_二分搜索_动态规划_困难_354.俄罗斯套娃信封问题 LeetCode_二分搜索_数学_阶乘_困难_793.阶乘函数后 K 个零 LeetCode_二分搜索_容斥原理_困难_878.第 N 个神奇数字
3.3.递归有关递的相关具体知识可以参考【算法】递归这篇文章。
简单 LeetCode_递归_双指针_简单_206. 反转链表
中等 LeetCode_递归_回溯算法_中等_22.括号生成 LeetCode_递归_快速幂_中等_50.Pow(x, n) LeetCode_递归_双指针_中等_92.反转链表 II LeetCode_递归_中等_138.复制带随机指针的链表 LeetCode_递归_动态规划_二叉树_中等_337.打家劫舍 III LeetCode_递归_中等_397.整数替换 LeetCode_递归_位运算_中等_779.第K个语法符号
困难 LeetCode_递归_双指针_困难_25.K 个一组翻转链表
3.4.回溯算法简单 LeetCode_回溯_简单_17.电话号码的字母组合 LeetCode_回溯_动态规划_简单_104.二叉树的最大深度
中等 LeetCode_回溯_递归_中等_22.括号生成 ✨LeetCode_回溯_中等_39.组合总和 LeetCode_回溯_中等_40.组合总和 II ✨LeetCode_回溯_中等_46.全排列 ✨LeetCode_回溯_中等_77.组合 ✨LeetCode_回溯_中等_78.子集 LeetCode_回溯_中等_79.单词搜索 LeetCode_回溯_中等_90.子集II ✨LeetCode_回溯_中等_93.复原 IP 地址 LeetCode_回溯_动态规划_中等_131.分割回文串 LeetCode_回溯_中等_216.组合总和 III LeetCode_回溯_中等_473.火柴拼正方形 LeetCode_回溯_中等_491.递增子序列 LeetCode_回溯_动态规划_背包问题_中等_494.目标和 LeetCode_回溯_优先级队列_659.分割数组为连续子序列 LeetCode_回溯_中等_698.划分为 k 个相等的子集 LeetCode_回溯_BFS_中等_784.字母大小写全排列 LeetCode_回溯_中等_1774.最接近目标价格的甜点成本 LeetCode_回溯_中等_2305.公平分发饼干
困难 LeetCode_回溯_递归_困难_37.解数独 ✨LeetCode_回溯_困难_51.N 皇后 LeetCode_回溯_困难_52.N皇后 II LeetCode_回溯_困难_301.删除无效的括号
3.5.动态规划 3.5.1.一维动态规划简单 ✨LeetCode_动态规划_简单_53.最大子数组和 LeetCode_动态规划_简单_70.爬楼梯 LeetCode_动态规划_回溯算法_二叉树_简单_104.二叉树的最大深度 LeetCode_位运算_动态规划_简单_338.比特位计数 ✨LeetCode_动态规划_简单_674.最长连续递增序列 LeetCode_动态规划_简单_1668.最大重复子字符串
中等 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_动态规划_中等_813.最大平均值和的分组 LeetCode_动态规划_中等_918.环形子数组的最大和 LeetCode_动态规划_中等_1105.填充书架 LeetCode_动态规划_中等_1027.最长等差数列 LeetCode_动态规划_中等_1653.使字符串平衡的最少删除次数
困难 LeetCode_动态规划_栈_困难_32.最长有效括号 LeetCode_动态规划_二分搜索_困难_354.俄罗斯套娃信封问题 LeetCode_动态规划_数位 dp_困难_902.最大为 N 的数字组合 LeetCode_动态规划_困难_940.不同的子序列 II LeetCode_动态规划_数位 dp_困难_1012.至少有 1 位重复的数字 LeetCode_动态规划_困难_1235.规划兼职工作 LeetCode_动态规划_困难_1326.灌溉花园的最少水龙头数目 LeetCode_动态规划_困难_1691.堆叠长方体的最大高度
3.5.2.多维动态规划简单 ✨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_动态规划_背包问题_回溯_中等_494.目标和 ✨LeetCode_动态规划_中等_516.最长回文子序列 LeetCode_动态规划_中等_518.零钱兑换 II LeetCode_动态规划_中等_583.两个字符串的删除操作 LeetCode_动态规划_中等_688.骑士在棋盘上的概率 LeetCode_动态规划_中等_714.买卖股票的最佳时机含手续费 LeetCode_动态规划_中等_718.最长重复子数组 LeetCode_动态规划_中等_764.最大加号标志 LeetCode_动态规划_中等_790.多米诺和托米诺平铺 LeetCode_动态规划_中等_808.分汤 LeetCode_动态规划_中等_931.下降路径最小和 ✨LeetCode_动态规划_中等_1143.最长公共子序列 LeetCode_动态规划_中等_1277.统计全为 1 的正方形子矩阵 LeetCode_动态规划_中等_1911.最大子序列交替和
困难 LeetCode_动态规划_困难_10.正则表达式匹配 LeetCode_动态规划_困难_44.通配符匹配 ✨LeetCode_动态规划_困难_72.编辑距离 LeetCode_动态规划_困难_123.买卖股票的最佳时机 III LeetCode_动态规划_困难_188.买卖股票的最佳时机 IV LeetCode_动态规划_困难_312.戳气球 LeetCode_动态规划_困难_552.学生出勤记录 II LeetCode_动态规划_困难_801.使序列递增的最小交换次数 LeetCode_动态规划_困难_887.鸡蛋掉落 LeetCode_动态规划_困难_1388.3n 块披萨
3.6.贪心算法简单 LeetCode_贪心算法_简单_409.最长回文串 LeetCode_贪心算法_简单_455.分发饼干
中等 ✨LeetCode_贪心算法_中等_55.跳跃游戏 LeetCode_贪心算法_中等_134. 加油站 LeetCode_贪心算法_中等_334. 递增的三元子序列 LeetCode_贪心算法_双端队列_中等_402.移掉 K 位数字 LeetCode_贪心算法_前缀树_中等_421.数组中两个数的最大异或值 LeetCode_贪心算法_区间问题_中等_435.无重叠区间 LeetCode_贪心算法_中等_665.非递减数列 LeetCode_贪心算法_中等_738.单调递增的数字 LeetCode_贪心算法_中等_670.最大交换 ✨LeetCode_贪心算法_中等_763.划分字母区间 LeetCode_贪心算法_中等_769.最多能完成排序的块 LeetCode_贪心算法_中等_846.一手顺子 LeetCode_贪心算法_中等_945.使数组唯一的最小增量 LeetCode_贪心算法_区间问题_中等_1024.视频拼接 LeetCode_贪心算法_中等_1775.通过最少操作次数使数组的和相等 LeetCode_贪心算法_中等_1785.构成特定和需要添加的最少元素 LeetCode_贪心算法_二分搜索_中等_1802.有界数组中指定下标处的最大值 LeetCode_贪心算法_中等_2542.最大子序列的分数
4.其它算法/思想 4.1.滑动窗口有关滑动窗口的相关具体知识可以参考【算法】滑动窗口这篇文章。
简单 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_滑动窗口_中等_904.水果成篮 LeetCode_滑动窗口_前缀和_中等_930.和相同的二元子数组 LeetCode_滑动窗口_前缀和_中等_1004.最大连续1的个数 III
困难 LeetCode_滑动窗口_困难_30.串联所有单词的子串 ✨LeetCode_滑动窗口_困难_76.最小覆盖子串
4.2.前缀和有关前缀和的相关具体知识可以参考【算法】前缀和这篇文章。
简单 LeetCode_前缀和_简单_303.区域和检索 - 数组不可变 LeetCode_前缀和_简单_1013.将数组分成和相等的三个部分
中等 LeetCode_前缀和_二分搜索_滑动窗口_中等_209.长度最小的子数组 ✨LeetCode_左右乘积列表_中等_238.除自身以外数组的乘积 LeetCode_前缀和_中等_304.二维区域和检索 - 矩阵不可变 LeetCode_前缀和_二叉树_中等_437.路径总和 III LeetCode_前缀和_哈希表_中等_523.连续的子数组和 LeetCode_前缀和_哈希表_中等_525.连续数组 ✨LeetCode_前缀和_哈希表_中等_560.和为 K 的子数组 LeetCode_前缀和_滑动窗口_中等_930.和相同的二元子数组 LeetCode_前缀和_中等_1139.最大的以 1 为边界的正方形 LeetCode_前缀和_中等_1769.移动所有球到每个盒子所需的最小操作数 LeetCode_中等_面试题_17.05.字母与数字
困难 LeetCode_前缀和_困难_862.和至少为 K 的最短子数组 LeetCode_前缀和_哈希表_困难_2488.统计中位数为 K 的子数组
4.3.差分数组有关差分数组的相关具体知识可以参考【算法】差分数组这篇文章。
中等 LeetCode_差分数组_中等_1094.拼车 LeetCode_差分数组_中等_1109.航班预订统计
4.4.区间问题中等 ✨LeetCode_区间问题_中等_56.合并区间 LeetCode_区间问题_中等_57.插入区间 ✨LeetCode_区间问题_贪心算法_中等_435.无重叠区间 LeetCode_区间问题_中等_452.用最少数量的箭引爆气球 LeetCode_区间问题_中等_795.区间子数组个数 LeetCode_区间问题_双指针_中等_986.区间列表的交集 LeetCode_区间问题_中等_1024.视频拼接 LeetCode_区间问题_中等_1288.删除被覆盖区间 LeetCode_区间问题_中等_1834.单线程 CPU
4.5.Boyer-Moore 投票算法简单 LeetCode_Boyer-Moore投票算法_简单_169.多数元素
中等 LeetCode_Boyer-Moore 投票算法_中等_229.求众数 II
4.6.洗牌算法有关洗牌算法的相关具体知识可以参考【算法】洗牌算法这篇文章。
中等 LeetCode_洗牌算法_中等_384.打乱数组