LeetCode 算法刷题目录 (Java)

(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_模拟_中等_2596.检查骑士巡视方案

困难
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_队列_中等_649.Dota2 参议院
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_字符串_简单_1071.字符串的最大公因子

中等
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_二叉树_中等_1372.二叉树中的最长交错路径
LeetCode_二叉树_中等_1448.统计二叉树中好节点的数目
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_二叉搜索树_中等_449.序列化和反序列化二叉搜索树
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_并查集_DFS_中等_2316.统计无向图中无法互相到达点对数

困难
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_线段树_中等_307.区域和检索 - 数组可修改

困难
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_DFS_中等_841.钥匙和房间
LeetCode_BFS_中等_934.最短的桥
LeetCode_多源 BFS_中等_994.腐烂的橘子
LeetCode_BFS_DFS_中等_1376.通知所有员工所需的时间
LeetCode_BFS_中等_1466.重新规划路线
LeetCode_BFS_中等_1926.迷宫中离入口最近的出口

困难
LeetCode_BFS_困难_773.滑动谜题
LeetCode_BFS_困难_864.获取所有钥匙的最短路径
LeetCode_多源 BFS_中等_2258.逃离火灾


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
LeetCode_拓扑排序_BFS_中等_1462.课程表 IV

困难
LeetCode_拓扑排序_困难_2603.收集树中金币


2.3.4.二分图

有关二分图判定的相关具体知识可以参考【算法】二分图判定这篇文章。

中等
LeetCode_二分图_中等_785.判断二分图
LeetCode_二分图_中等_886.可能的二分法


2.3.5.最小生成树

有关最小生成树算法的相关具体知识可以参考下面的两篇文章:
【算法】最小生成树——克鲁斯卡尔 (Kruskal) 算法
【算法】最小生成树——普利姆 (Prim) 算法

中等
LeetCode_Kruskal_中等_1584.连接所有点的最小费用


2.3.6.最短路径

有关最短路径的相关算法可以参考下面的文章:
【算法】最短路径——迪杰斯特拉 (Dijkstra) 算法
【算法】最短路径——弗洛伊德 (Floyd) 算法

中等
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_二分搜索_中等_2594.修车的最少时间

困难
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_贪心算法_简单_605.种花问题

中等
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.最大子序列的分数

困难
LeetCode_贪心算法_困难_630.课程表 III


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_滑动窗口_中等_1493.删掉一个元素以后全为 1 的最长子数组

困难
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.航班预订统计

困难
LeetCode_离散化差分_困难_2251.花期内花的数目


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.打乱数组

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值