Skip to content

Latest commit

 

History

History

leetcode

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

题目分类

dfs

题解 描述 解法 难度
743-网络延迟时间 判有向图的连通性 dfs判连通 简单
0017-电话号码的字母组合 手机按键数字转字母 dfs 简单
0022-括号生成 生成合法的括号组合 dfs 中等
0079-单词搜索 判断字符串是否出现在字符矩阵中 dfs+回溯 中等
0797-所有可能的路径 求从0到n-1的全部路径 dfs+回溯 中等
0650-只有两个键的键盘 多次复制粘贴构造长度为n的字符串 dfs 中等
0430-扁平化多级双向链表 flattern一个多层链表 dfs 中等
0437-路径总和III 求树中能构成x的组合数 dfs/前缀和 中等
0638-大礼包 求按礼包购买和单个购买的最少花费 dfs 中等
0869-重新排序得到2的幂 求一个数数位重组后是否是2的幂次 dfs 中等
0089-格雷编码 格雷编码 dfs+回溯 中等
01219-黄金矿工 路径最大和 dfs+回溯 中等
0200-岛屿数量 求联通分量数目 dfs 简单
1020-飞地的数量 求不连通边界的格子的数目 dfs 中等
0695-岛屿的最大面积 求最大岛屿面积 dfs 中等
1254-统计封闭岛屿的数目 求被水包围的岛屿的数量 dfs 中等
0841-钥匙和房间 求是否能走遍所有房间 dfs 中等
1718-构建字典序最大的可行序列 构造值为i的两个元素之间的距离也为i的序列 回溯 中等
6059-检查是否有合法括号字符串路径 判断矩形左上角到右下角的路径是否合法 记忆化dfs 困难
0473-火柴拼正方形 判断全部火柴能否拼成一个正方形 dfs实现分组 中等

bfs

题解 描述 解法 难度
0301-删除无效的括号 删除最少括号获得合法组合 bfs/脑筋急转弯 中等
1091-二进制矩阵中的最短路径 求左上角到右下角的路径长度 bfs 中等
0542-01矩阵 求所有1到最近的0的距离 bfs 中等
0433-最小基因变化 从字符串start到end的最小变化次数 bfs 中等
0329-矩阵中的最长递增路径 求矩阵中最长递增路径 bfs 困难
6054-逃离火灾 求最久能在起始点呆多久后,还能到达出口 二分+bfs 困难
2290-到达角落需要移除障碍物的最小数目 求从左上角到右下角经过的最少障碍数 01 BFS + 堆优化 困难

图论

题解 描述 解法 难度
743-网络延迟时间 单源最短路模板题 dijkstra 简单
802-找到最终的安全状态 求dfs过程中无环的所有起点 dfs+三色标记法/反图+拓扑排序 中等
847-访问所有节点的最短路径 求一条包含所有顶点的路径,要求路径最短 状态压缩BFS 中等
1436-旅行终点站 求路径终点 求出度 简单
1557-可以到达所有点的最少点数目 入度为0的点 简单
1584-连接所有点的最小费用 最小生成树裸题 最小生成树 中等

数学/博弈/数论

题解 描述 解法 难度
0611-有效三角形的个数 求数组中能组成三角形的三元组的个数 三角形最短两边之和大于第三边 简单
0264-丑数II 求第n个丑数 递推 简单
0313-超级丑数 求第n个超级丑数 递推 简单
0118-杨辉三角 求每一行杨辉三角形的值 找规律 简单
0384-打乱数组 洗牌算法 洗牌算法 中等
0292-Nim游戏 两人取一堆石子 博弈论 简单
0326-3的幂 求一个数是不是3的幂次 数学 简单
0553-最优除法 给整数数组添加除号和括号,使得结果最大 数学 简单

思维/脑筋急转弯/脑筋小转弯/找规律/构造

题解 描述 解法 难度
0789-逃脱阻碍者 x逃跑之前不被其他人追上 思维 简单
0202-快乐数 判断一个数是不是快乐数 思维 简单
0169-多数元素 判断数组中数量超过一半的数 思维/摩尔投票算法 简单
0006-Z字形变换 求字符串按z字排放后变成的字符串 找规律 简单
0521-最长特殊序列I 最长特殊序列I 脑筋急转弯 简单
2038-如果相邻两个颜色均相同则删除当前颜色 如果相邻两个颜色均相同则删除当前颜色 脑筋小转弯 简单
5253-找到指定长度的回文数 长度为len的第i个回文数是什么 找规律 中等
2028-找出缺失的观测数据 求n个数的一个组合,使得这n个数和已知m个数的均值是mean 构造 简单
剑指Offer45-把数组排成最小的数 把整数数组排成最小的数 构造/排序 简单

滑动窗口/双指针

题解 描述 解法 难度
0209-长度最小的子数组 求最短连续的子数组,使得子数组和大于x 思维 中等
0011-盛最多水的容器 求一个区间,使得x最大 思维/双指针 中等
0986-区间列表的交集 求两个区间数组的所有区间的交集 数学/双指针 中等
0844-比较含退格的字符串 对两个字符串进行编辑操作后,判断是否相等 思维/双指针 中等
0825-适龄的朋友 求满足条件的区间和的和 思维/双指针 中等
1004-最大连续1的个数III 最多k次操作,将数组中的0转换为1,求1的最大连续长度 滑动窗口 中等
2024-考试的最大困扰度 最多改变k次,求最长的T串或F串 滑动窗口 中等
1151-少交换次数来组合所有的1 求最小交换次数,使得01数组中所有的1连续 滑动窗口 中等
剑指Offer59-I.滑动窗口的最大值 滑动窗口GetMax() 滑动窗口+单调队列 困难
0713-乘积小于 K 的子数组 求乘积小于k的连续子数组的个数 滑动窗口 中等

二分/三分

题解 描述 解法 难度
0001-两数之和 在数组中寻找和等于target的两个数的下标 二分 简单
0034-在排序数组中查找元素的第一个和最后一个位置 查找元素的左右区间 二分 简单
0033-搜索旋转排序数组 升序数组旋转一次后以O(logn)复杂度寻找其中元素 二分/脑经急转弯 中等
0074-搜索二维矩阵 在一个排好序的二维矩阵中查找元素 二分/脑经急转弯 中等
0153-寻找旋转排序数组中的最小值 在排序后旋转的数组里找最小值 二分/脑经急转弯 中等
0162-寻找峰值 寻找一个峰值 二分/脑经急转弯 中等
0015-三数之和 求和为0的三个数的所有组合 二分 中等
剑指Offer11-旋转数组的最小数字 循环数组的最小值 二分 中等
0154-寻找旋转排序数组中的最小值II) 循环数组的最小值 二分 中等
0029-两数相除 带数值溢出判断的二分查找 二分 困难
剑指OfferII069-山峰数组的顶部 寻找山峰 二分 简单
0540-有序数组中的单一元素 查找不降序数组中只出现一次的整数 二分/找规律 中等
1060-有序数组中的缺失元素 查找有序数组中第k个缺失元素 二分 中等
0302-包含全部黑色像素的最小矩阵 求包含所有黑色像素的最小矩阵的面积 二分 中等
1231-分享巧克力 将数组分为连续的k+1份,使得最小的那一份最大 二分 中等
LCP0028-采购方案 求数组中和小于等于x的组合的个数 二分 简单
0349-两个数组的交集 求两个数组的交集 二分/哈希表 简单
meituan010-小团的默契游戏 求合法的l和r,使得过滤后的数组单调 二分 困难
[剑指 Offer 53 - II. 0~n-1中缺失的数字](./剑指 Offer 53 - II. 0~n-1中缺失的数字) 求有序数组缺失的那个数 二分 简单
1712-将数组分成三个子数组的方案数 将非负数组分为连续的三部分,使得三部分的和不递减,求方案数 二分 中等

贪心

题解 描述 解法 难度
0881-救生艇 求最少需要多少船过河 贪心 简单
1221-分割平衡字符串 求一个balance字符串最多能划分为多少个balance字符串 贪心/脑筋急转弯 简单
0517-超级洗衣机 每次向左右一位移动,求最少移动次数使得平衡 贪心 困难
1705-吃苹果的最大数目 苹果会过期,求能吃到多少个苹果 贪心+优先队列 中等
1405-最长快乐字符串 构造不出现aaa、bbb、ccc的最长字符串 贪心 中等
meituan-011-搭配出售 求最大利润 贪心 中等
1717-删除子字符串的最大得分 删除ab得x分,删除ba得y分,求最大分数 贪心 中等

dp

题解 描述 解法 难度
0313-超级丑数 求第n个超级丑数 dp 中等
0413-等差数列划分 求数组中等差数列个数(连续子数组) dp 中等
0446-等差数列划分II 求数组中等差数列个数(非连续子数组) dp 困难
0516-最长回文子序列 最长回文子序列 dp 中等
0055-跳跃游戏 求下标i最多跳跃A[i]下,是否能到达n dp 中等
0787-K站中转内最便宜的航班 有点数量限制的单源最短路 dp 中等
0062-不同路径 从(0, 0)到达(m, n)的路径数 dp 简单
0091-解码方法 带限制的字符串子串的组合个数 dp 中等
0139-单词拆分 判断字符串是否可被拆分为特定的单词 dp 中等
0673-最长递增子序列的个数 求长为x的最长上升子序列的个数 dp 中等
1143-最长公共子序列 求两个字符串的最长公共子序列的长度 dp 中等
0583-两个字符串的删除操作 求两个字符串的最长公共子序列的长度 dp 中等
0343-整数拆分 求和为n的若干个正整数的最大乘积 dp 中等
0322-零钱兑换 求组成和为x所需要的最少的硬币数 dp 中等
0072-编辑距离 求字符串A变为字符串B的最短编辑距离 dp 中等
0600-不含连续1的非负整数 求0<=x<=n的,二进制形式下没有连续1的x的个数 位运算 困难
0678-有效的括号字符串 含有星号的括号匹配 dp 困难
0650-只有两个键的键盘 用最少的次数复制粘贴获得长度为n的串 dp 简单
剑指Offer42(连续子数组的最大和 连续子数组的最大和 dp 简单
0639-解码方法II 解码方案数 dp 困难
0097-交错字符串 字符串s1和s2是否能组成s3 dp 中等
0688-骑士在棋盘上的概率 马从棋盘上随机往8个方向跳跃,求最后留在棋盘的概率 dp 中等
2104-子数组范围和 子数组的范围和 dp 简单
meituan009-小团的装饰物 arr[i]arr[i-1]的倍数,且arr[m]<=n,求满足的方案数 dp 中等
0198-打家劫舍 不能取连续的两个数组元素,求最大和 dp 中等
剑指Offer47-礼物的最大价值 从左上角走到右下角,求路径权值最大和 dp 中等
0740-删除并获得点数 设abc连续,取b则不能取ac,求最大点数 dp 中等
6058-统计打字方案数 手机按键转换为字符的方案数 dp 中等
0691-贴纸拼词 用单词中的字符拼接目标字符串,求所需要的最少单词个数 dp + 二进制枚举 困难
0213-打家劫舍II 求最大金钱数,要求取1则不能取n 线性dp 中等
1230-抛掷硬币 每个硬币投掷一次,求刚好有target个硬币正面朝上的概率 二维线性dp 中等
1746-经过一次操作后的最大子数组和 求最大连续子数组和,其中必须使用一次nums[i] * nums[i] 线性dp/二状态dp 中等
0309-最佳买卖股票时机含冷冻期 如题 线性dp 中等

字符串

题解 描述 解法 难度
1044-最长重复子串 求字符串中最长的重复子串 二分+Rabin-Karp算法 困难
0097-交错字符串 字符串s1和s2是否能组成s3 dp 中等
0409-最长回文串 构造一个最长回文串 简单
0208-实现Trie(前缀树) 实现trie树 中等
0211-添加与搜索单词-数据结构设计 字典树+dfs 中等
1858-包含所有前缀的最长单词 字典树应用 中等

题解 描述 解法 难度
0144-二叉树的前序遍历 树的前序遍历 朴素-前序遍历 简单
0094-二叉树的中序遍历 树的中序遍历 朴素-中序遍历 简单
0145-二叉树的后序遍历 树的后序遍历 朴素-后序遍历 简单
0101-对称二叉树 判断一棵二叉树是否对称 特殊遍历 中等
0104-二叉树的最大深度 求树的最大深度 递归 简单
0102-二叉树的层序遍历 求二叉树的每层元素 bfs 简单
0226-翻转二叉树 翻转二叉树 dfs 简单
0112-路径总和 判断是否存在到达叶子且长度为x的路径 dfs 简单
0700-二叉搜索树中的搜索 在BST中查找值为x的节点 dfs 简单
0701-二叉搜索树中的插入操作 在BST中插入值x dfs 简单
0653-两数之和IV 输入BST 在BST中找到和为k的两个数 dfs 简单
0235-二叉搜索树的最近公共祖先 求BST上两个节点的最近公共祖先 dfs 简单
0098-验证二叉搜索树 判断一棵树是不是BST dfs 简单
1609-奇偶树 判断一棵树是不是奇偶树 层次遍历 中等
0606-根据二叉树创建字符串 加括号的前序遍历 加括号的前序遍历 简单
将有序数组转换为二叉搜索树 从一个已排序数组构造高度平衡的二叉树 构建二分搜索树 简单
0100-相同的树 判断两棵二叉树是否相同 递归 简单
1469-寻找所有的独生节点 求二叉树的独生节点 递归 简单
剑指Offer27-二叉树的镜像 求二叉树的镜像 递归 简单
剑指Offer28-对称的二叉树 判断二叉树是否和其镜像相等 递归/层序遍历 中等
0543-二叉树的直径 二叉树的直径 dfs 简单/中等
0105-从前序与中序遍历序列构造二叉树 根据前序和中序序列构建二叉树 递归 中等
剑指Offer26-树的子结构 判断树是否是另一颗树的子结构 递归 中等

线段树

题解 描述 解法 难度
1109-航班预订统计 区间更新,区间查询 线段树/差分 中等
0307-区域和检索-数组可修改 建树、点更新、区间查询 线段树 中等
0406-根据身高重建队列 将打乱的数组恢复顺序 二分+线段树 中等
0729-我的日程安排表I 判断区间相交 动态开点线段树 中等
LCP0052-二叉搜索树染色 区间置x 线段树区间更新、区间查询 中等
6066-统计区间中的整数数目 区间置x + 整个区间查询 动态开点线段树 困难
0732-我的日程安排表III 区间最值 动态开点 + 区间最值 困难

差分

题解 描述 解法 难度
1109-航班预订统计 差分 差分 中等
0732-我的日程安排表III 差分 差分 困难
1094-拼车) 差分 差分 中等

数据结构

题解 描述 解法 难度
0020-有效的括号 括号匹配 简单
0083-删除排序链表中的重复元素 删除链表汇总重复元素 链表 简单
0206-反转链表 反转链表 链表 简单
0203-移除链表元素 删除链表中值为x的元素 链表 简单
0021-合并两个有序链表 合并两个有序的链表为一个 链表 简单
0141-环形链表 判断链表是否有环 快慢指针 简单
0295-数据流的中位数 求动态数组的中位数 大小堆维护中位数 困难
面试题17.14.最小K个数 求数组最小k位数 优先队列/堆 中等
0502-IPO 求k次的最大利润 优先队列/堆 困难
0234-回文链表 判断链表形式的回文串 把值复制到数组中进行处理 简单
剑指Offer24-反转链表 反转链表 链表 简单
0187-重复的DNA序列 求出现一次以上的所有子串 哈希表 中等
0239-滑动窗口最大值 滑动窗口的最大值 中等
0155-最小栈 最小栈 中等
378-有序矩阵中第K小的元素 大顶堆 中等
0946-验证栈序列 判断栈的出栈序列是否合法(栈元素唯一) 中等
0261-以图判树 判断一个图是不是一棵树 并查集 中等
剑指Offer51-数组中的逆序对 求逆序对个数 离散化+树状数组 困难
0493-翻转对 求翻转对个数 二维偏序问题,树状数组 困难
0315-计算右侧小于当前元素的个数 求逆序对个数 二维偏序问题,树状数组 困难
0715-Range模块 区间合并、区间删除、区间查询 cpp set 模拟 困难

二维偏序问题

题解 描述 解法 难度
6043-统计包含每个点的矩形数目 求点数组中的每个点在多少个矩阵里 树状数组 中等
0493-翻转对 求翻转对个数 二维偏序问题,树状数组 困难
0315-计算右侧小于当前元素的个数 求逆序对个数 二维偏序问题,树状数组 困难

系统设计/编程能力

题解 描述 解法 难度
剑指Offer59-II-队列的最大值 给队列实现均摊时间复杂度为O(1)的GetMax() 单调队列 中等

位运算

题解 描述 解法 难度
0201-数字范围按位与 求区间内所有数相与的结果 位运算 中等
0136-只出现一次的数字 求数组中只出现一次的数 位运算 简单
0600-不含连续1的非负整数 求0<=x<=n的,二进制形式下没有连续1的x的个数 位运算/dp 困难
0371-两整数之和 不用+实现加法 位运算 简单
0405-数字转换为十六进制数 有符号十进制转16进制 位运算 简单
0260-只出现一次的数字III 求数组中只出现了一次的两个数 位运算/脑筋急转弯 中等
剑指Offer56-II.数组中数字出现的次数II 数组中有一个只出现一次的数x,其他数都出现了3次,求x 位运算 中等
0868-二进制间距 求数的二进制形式下两个相邻1的最大距离 位运算 简单

模拟/多线程

题解 描述 解法 难度
0457-环形数组是否存在循环 求按数组内容为下标进行遍历,是否能得到一个环 暴力模拟/快慢指针 中等
0556-重塑矩阵 reshape matrix 模拟 简单
0036-有效的数独 判断数独是否有效 模拟 简单
0073-矩阵置零 以O(1)的空间复杂度将矩阵0元素所在的行和列全部置为0 模拟 中等
0232-用栈实现队列 用栈来模拟队列 模拟 中等
0844-比较含退格的字符串 对两个字符串进行编辑操作后,判断是否相等 模拟 中等
0005-最长回文子串 求最长回文串 模拟 简单
0528-按权重随机选择 随机从区间中取出一个数,并返回下标 模拟 中等
0706-设计哈希映射 实现一个哈希表 模拟 中等
0068-文本左右对齐 按要求生成字符串 模拟 中等
0447-回旋镖的数量 求回旋镖个数 脑筋小转弯/模拟 中等
0725-分隔链表 将链表元素按顺序分为k组 链表 简单
1114-按序打印 多线程顺序打印 多线程顺序打印 简单
剑指Offer09(用两个栈实现队列 用两个栈模拟一个队列 模拟 简单
0415-字符串相加 两个字符串数字相加 模拟 简单
0166-分数到小数 将整数除法中循环节部分用括号标识 模拟 中等
0482-密钥格式化 将字符串中的字母和数字分组 模拟 简单
0273-整数转换英文表示 将非负整数转换为英文单词 模拟 困难
0352-将数据流变为多个不相交区间 不断插入新的整数,维护区间 模拟 困难
0029-两数相除 不使用乘法、除法、模实现int除法 二分 困难
0038-外观数列 外观数列 模拟 简单
1115-交替打印FooBar 多线程顺序打印 多线程顺序打印指定个数 简单
1116-打印零与奇偶数 多线程顺序打印 多线程顺序打印指定个数 困难
0984-不含AAA或BBB的字符串 生成指定格式的字符串 模拟 中等
2109-向字符串添加空格 给字符串指定位置添加空格 模拟 简单
2110-股票平滑下跌阶段的数目 求平滑下跌的数目 模拟 简单
0306-累加数 判断一个字符串是否可以拆分成加法序列 模拟 中等
2170-使数组变成交替数组的最少操作数 将一个数组修改为交替数列的最小操作数 模拟 中等
0838-推多米诺 求多米诺骨牌的最终状态 模拟 中等
1706-球会落何处 求小球从最高层掉落后的状态 找规律+模拟 中等
0537-复数乘法 复数乘法 模拟 简单
0393-UTF-8编码 判断是不是合法的utf8编码 按定义模拟 简单
1427-字符串的左右移 字符串字符循环左右移 按定义模拟 简单
2043-简易银行系统 模拟一个简易银行交易系统 按定义模拟 简单
meituan-006-小团的神秘暗号 加密字符串解码 模拟 简单
0008-字符串转换整数(atoi 实现atoi() 模拟 中等

数组

题解 描述 解法 难度
2171-拿出最少数目的魔法豆 对数组中的数做任意次减法,求最后非0数全相等的最少操作次数 排序+前缀和 中等
0969-煎饼排序 对随机数组使用reverse(arr[0...k-1])的方式排序 将reverse_k等价转换 中等
meituan-003-小美的跑腿代购 结构体排序 结构体排序 简单
剑指Offer66.构建乘积数组 前缀积和后缀积 简单
0041-缺失的第一个正数 原地哈希求缺失的第一个正数 困难
0442-数组中重复的数据 原地哈希求缺失的第一个正数 中等

链表

题解 描述 解法 难度
0002-两数相加 两个非负数用链表表示,求和 模拟 简单
6093-设计一个文本编辑器 设计一个编辑器(链表、deque) 模拟 困难

简单

中等