[toc]

1.二分

1.1 索引二分

==LeetCode33.搜索旋转排序数组==
==LeetCode34.在排序数组中查找元素的第一个和最后一个位置==
==LeetCode35.搜索插入位置==
==LeetCode81.搜索旋转排序数组Ⅱ==
==LeetCode74.搜索二维矩阵(坐标变换:二维到一维)==
==LeetCode153.寻找旋转排序数组中的最小值==
==LeetCode154.寻找旋转排序数组中的最小值Ⅱ==:star:
==LeetCode162.寻找峰值==::star:
LeetCode274.H指数(排序)
LeetCode275.H指数Ⅱ
==LeetCode278.第一个错误的版本==
==LeetCode436.寻找右区间==:star:

1.2 值域二分

==LeetCode374.猜数字大小==
==LeetCode69.x的平方根==
LeetCode367.有效的完全平方数
LeetCode287.寻找重复数(鸽巢原理+二分)
==LeetCode378.有序矩阵中第K小的元素==:star:

2.链表

==LeetCode2.两数相加(高精度加法)==
==LeetCode445.两数相加Ⅱ(高精度加法+栈)==
==LeetCode19.删除链表的倒数第N个节点==
==LeetCode21.合并两个有序链表==
==LeetCode23.合并K个升序链表(多路归并)==:star::star:
==LeetCode24.两两交换链表中的节点==:star::star:
LeetCode25.K个一组翻转链表
==LeetCode61.旋转链表(快慢指针)==
==LeetCode83.删除排序链表中的重复元素==:star::star::star::star::star:
==LeetCode82.删除排序链表中的重复元素Ⅱ==:star::star::star::star::star:
==LeetCode86.分隔链表==
LeetCode206.翻转链表
==LeetCode92.反转链表Ⅱ==:star::star::star::star::star::star::star::star::star:
LeetCode141.环形链表
LeetCode142.环形链表Ⅱ
LeetCode143.重排链表
==LeetCode160.相交链表==:star::star::star::star::star::star:
==LeetCode203.移除链表元素==:star::star::star::star::star::star:
LeetCode234.回文链表
LeetCode237.删除链表中的节点
LeetCode328.奇偶链表
LeetCode876.链表的中间节点

3.数组

LeetCode36.有效的数独
LeetCode48.旋转图像(二维数组原地旋转)
LeetCode56.合并区间(区间问题)
LeetCode57.插入区间(区间问题)
LeetCode73.矩阵置零
LeetCode169.多数元素(摩尔投票法)
LeetCode189.旋转数组
LeetCode229.求众数2(摩尔投票法)
LeetCode238.除自身以外数组的乘积(前后缀分解)
LeetCode303.区域和检索-数组不可变(一维前缀和)
LeetCode304.二维区域和检索-矩阵不可变(二维前缀和)
LeetCode384.打乱数组(洗牌算法)
LeetCode413.等差数列划分(差分)
LeetCode419.甲板上的战舰
LeetCode442.数组中重复的数据(内卷法)
LeetCode448.找到所有数组中消失的数字(内卷法)
LeetCode453.最小移动次数使数组元素相等(逆向思维)
LeetCode1550.存在连续三个奇数的数组

4.树

==LeetCode98.验证二叉搜索树==:star::star::star::star:
LeetCode99.恢复二叉搜索树(Morris遍历)
==LeetCode100.相同的树==
==LeetCode101.对称二叉树==:star::star::star::star::star::star::star::star:
==LeetCode102.二叉树的层序遍历==:star::star::star::star::star::star::star::star:
==LeetCode107.二叉树的层次遍历Ⅱ==
==LeetCode103.二叉树的锯齿形层次遍历==
==LeetCode104.二叉树的最大深度==
==LeetCode105.从前序和中序遍历序列构造二叉树==:star::star::star::star::star::star::star::star:
==LeetCode106.从中序和后序遍历序列构造二叉树==:star::star::star::star::star::star::star::star:
==LeetCode108.将有序数组转换为二叉搜索树==
==LeetCode109.有序链表转换二叉搜索树==
==LeetCode110.平衡二叉树==
==LeetCode111.二叉树的最小深度==
==LeetCode112.路径总和==:star::star::star::star::star::star::star::star:
==LeetCode113.路径总和Ⅱ==:star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star:
==LeetCode114.二叉树展开为链表==:star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star::star:
LeetCode116.填充每个节点的下一个右侧节点指针
LeetCode117.填充每个节点的下一个右侧节点指针Ⅱ
==LeetCode124.二叉树中的最大路径和==
==LeetCode129.求根到叶子节点数字之和==
==LeetCode144.二叉树的前序遍历==(迭代版)
==LeetCode145.二叉树的后序遍历==(迭代版)
==LeetCode173.二叉搜索树迭代器==
==LeetCode222.完全二叉树的节点个数==
==LeetCode226.翻转二叉树==
==LeetCode230.二叉搜索树中第K小的元素==
==LeetCode297.二叉树的序列化与反序列化==
LeetCode352.将数据流变为多个不相交区间(平衡二叉树TreeSet)
==LeetCode404.左叶子之和==
LeetCode429.N叉树的层序遍历
LeetCode449.序列化和反序列化二叉搜索树
LeetCode450.删除二叉搜索树中的节点
LeetCode501.二叉搜索树中的众数

5.Trie树(字典树)

LeetCode208.实现Trie(前缀树)
LeetCode211.添加与搜索单词-数据结构设计
LeetCode212.单词搜索Ⅱ(DFS+Trie优化)
LeetCode421.数组中两个数的最大异或值

6.堆

LeetCode215.数组中的第K个最大元素(TopK)
LeetCode295.数据流的中位数(对顶堆)
LeetCode480.滑动窗口中位数(对顶堆)
LeetCode347.前K个高频元素(TopK)
LeetCode373.查找和最小的K对数字(TopK)
LeetCode451.根据字符出现频率排序(TopK)

7.栈、队列

LeetCode155.最小栈(设计)
LeetCode844.比较含退格的字符串
LeetCode1381.设计一个支持增量操作的栈(设计)

7.1 转换

LeetCode225.用队列实现栈
LeetCode232.用栈实现队列

7.2 单调栈

LeetCode42.接雨水
LeetCode84.柱状图中最大的矩形
LeetCode85.最大矩形(42变形)
LeetCode739.每日温度

7.3 单调队列

LeetCode239.滑动窗口最大值

7.4 逆波兰表达式/计算器

LeetCode150.逆波兰表达式求值
LeetCode224.基本计算器
LeetCode227.基本计算器Ⅱ

7.5 括号序列

LeetCode20.有效的括号
LeetCode32.最长有效括号

8.双指针

8.1 同向双指针

LeetCode38.外观数列
LeetCode58.最后一个单词长度
LeetCode26.删除排序数组中的重复项
LeetCode80.删除排序数组中的重复项Ⅱ
LeetCode27.移除元素
LeetCode75.颜色分类(三指针)
LeetCode88.合并两个有序数组
LeetCode283.移动零
LeetCode392.判断子序列
LeetCode434.字符串中的单词数
LeetCode443.压缩字符串
LeetCode485.最大连续1的个数
LeetCode763.划分字母区间
LeetCode922.按奇偶排序数组

8.2 滑动窗口

LeetCode3.无重复字符的最长子串
LeetCode76.最小覆盖子串
LeetCode209.长度最小的子数组(前缀和+双指针)
LeetCode424.替换后的最长重复字符
LeetCode438.找到字符串中所有字母异位词

8.3 逆向双指针

LeetCode5.最长回文子串
LeetCode11.盛水最多的容器
LeetCode15.三数之和
LeetCode16.最接近的三数之和
LeetCode18.四数之和
LeetCode125.验证回文串
LeetCode167.两数之和Ⅱ-输入有序数组
LeetCode344.反转字符串
LeetCode345.反转字符串中的元音字母

9.哈希表

LeetCode49.字母异位词分组
LeetCode128.最长连续序列
LeetCode217.存在重复元素
LeetCode219.存在重复元素Ⅱ
LeetCode220.存在重复元素Ⅲ
LeetCode299.猜数字游戏
LeetCode349.两个数组的交集
LeetCode350.两个数组的交集Ⅱ
LeetCode380.常数时间插入、删除和获取随机元素
LeetCode381.O(1)时间插入、删除和获取随机元素-允许重复
LeetCode383.赎金信
LeetCode387.字符中的第一个唯一字符
LeetCode409.最长回文串
LeetCode437.路径总和Ⅲ(前缀和+哈希表)
LeetCode560.和为K的子数组(前缀和+哈希表)
LeetCode454.四数相加Ⅱ
LeetCode146.LRU缓存
LeetCode460.LFU缓存
LeetCode705.设计哈希集合
LeetCode706.设计哈希映射
LeetCode1577.数的平方等于两数乘积的方法数
LeetCode1647.字符频次唯一的最小删除次数

10.位运算

LeetCode67.二进制求和(高精度加法)
LeetCode136.只出现一次的数字(异或性质)
LeetCode137.只出现一次的数字Ⅱ
LeetCode260.只出现一次的数字Ⅲ(分组异或)
LeetCode268.丢失的数字(异或性质)
LeetCode289.生命游戏(二进制位存状态)
LeetCode318.最大单词长度乘积(二进制位存状态)
LeetCode371.两整数之和
LeetCode389.找不同(异或性质)
LeetCode405.数字转换为十六进制数(进制转换)
LeetCode476.数字的补数
LeetCode477.汉明距离总和

11.排序

LeetCode147.对链表进行插入排序
LeetCode148.排序链表(链表归并排序)
LeetCode264.丑数Ⅱ(多路归并)
LeetCode313.超级丑数(多路归并)
LeetCode912.排序数组(排序模板题)

12.数学

LeetCode43.字符串相乘(高精度乘法)
LeetCode50.pow(x,n)(快速幂)
LeetCode60.排列序列(字典序找位置)
LeetCode67.二进制求和(二进制的高精度加法)
LeetCode89.格雷编码(格雷码)
LeetCode149.直线上最多的点数(平面几何、斜率)
LeetCode166.分数到小数(模拟除法找循环节)
LeetCode172.阶乘后的零
LeetCode179.最大数(自定义排序)
LeetCode202.快乐数(快慢指针)
LeetCode233.数字1的个数(计数问题)
LeetCode263.丑数(质因数分解)
LeetCode204.计数质数(筛质数)
LeetCode205.同构字符串(双射)
LeetCode223.矩形面积(求面积)
LeetCode258.各位相加
LeetCode270.单词规律(双射)
LeetCode292.Nim游戏(博弈论)
LeetCode319.灯泡开关(算数基本定理、约数)
LeetCode231.2的幂
LeetCode326.3的幂
LeetCode342.4的幂
LeetCode343.整数拆分(因数分解)
LeetCode357.计算各个位数不同的数字个数(计数问题)
LeetCode365.水壶问题(裴蜀定理)
LeetCode412.Fizz Buzz(因数)
LeetCode415.字符串相加(高精度加法)
LeetCode423.从英文中重建数字(计数问题)
LeetCode440.字典序的第K小数字(计数问题,模拟遍历十叉树)
LeetCode441.排列硬币
LeetCode459.重复的子字符串(循环节)
LeetCode463.岛屿的周长(求平面图形周长)
LeetCode492.构造矩形
LeetCode1551.使数组中所有元素相等的最小操作数
LeetCode1643.第K条最小指令(字典序+组合数+计数问题)

13.搜索

13.1 DFS

==LeetCode17.电话号码的字母组合==
==LeetCode22.括号生成==
==LeetCode37.解数独==:star::star::star::star::star::star::star:
==LeetCode39.组合总和==:star::star::star::star::star::star::star:
LeetCode40.组合总和Ⅱ
LeetCode126.组合总和Ⅲ
LeetCode46.全排列
LeetCode47.全排列Ⅱ
LeetCode51.N皇后
LeetCode52.N皇后Ⅱ
LeetCode77.组合
LeetCode78.子集
LeetCode90.子集Ⅱ
LeetCode79.单词搜索
LeetCode93.复原IP地址
LeetCode130.被围绕的区域(Flood Fill)
LeetCode133.克隆图
LeetCode138.复制带随机指针的链表
LeetCode301.删除无效的括号
LeetCode386.字典序排数(模拟遍历Trie树)
LeetCode417.太平洋大西洋水流问题(Flood Fill)
LeetCode430.扁平化多级双向链表(可看成二叉树的层序遍历)
LeetCode473.火柴拼正方形

13.2 BFS

LeetCode127.单词接龙
LeetCode126.单词接龙Ⅱ(BFS+DFS)
LeetCode433.最小基因变化

14.贪心

LeetCode55.跳跃游戏
LeetCode45.跳跃游戏Ⅱ
LeetCode124.加油站
LeetCode316.去除重复字母
LeetCode402.移掉K位数字
LeetCode455.分发饼干
LeetCode1642.可以到达的最远建筑(堆)
LeetCode1648.销售价值减少的颜色球(贪心+优化计算)

14.1 区间贪心

LeetCode435.无重叠区间
LeetCode452.用最少数量的箭引爆气球
LeetCode1024.视频拼接

15.分治

LeetCode95.不同的二叉搜索树(卡特兰数)
LeetCode241.为表达式设置优先级(卡特兰数)
LeetCode105.从前序和中序遍历序列构造二叉树
LeetCode106.从中序和后序遍历序列构造二叉树
LeetCode108.将有序数组转换为二叉搜索树
LeetCode109.有序链表转换二叉搜索树

16.动态规划

16.1 背包问题

16.1.1 01背包

LeetCode416.分割等和子集
LeetCode494.目标和

16.1.2 完全背包

LeetCode279.完全平方数
LeetCode322.零钱兑换
LeetCode518.零钱兑换Ⅱ

16.1.3 二维费用背包

LeetCode474.一和零

16.2 LIS模型

LeetCode300.最长上升子序列
LeetCode354.俄罗斯套娃信封问题(二维LIS)
LeetCode368.最大整除子集(LIS求方案)
LeetCode1626.无矛盾的最佳球队(二维LIS+LIS最大和)

16.3 线性DP

LeetCode53.最大子序和
LeetCode62.不同路径
LeetCode63.不同路径Ⅱ
LeetCode64.最小路径和
LeetCode70.爬楼梯(递推)
LeetCode72.编辑距离
LeetCode96.不同的二叉搜索树(递推)
LeetCode97.交错字符串
LeetCode115.不同的子序列
LeetCode118.杨辉三角
LeetCode119.杨辉三角Ⅱ
LeetCode120.三角形最小路径和
LeetCode131.分割回文串(DP+DFS)
LeetCode132.分割回文串Ⅱ
LeetCode174.地下城游戏
LeetCode221.最大正方形(分类讨论)
LeetCode509.斐波那契数
LeetCode514.自由之路
LeetCode1155.掷骰子的n种方法(骰子问题)

抢劫问题

LeetCode198.打家劫舍
LeetCode213.打家劫舍Ⅱ
方格取数问题(矩阵双路径)

LeetCode741.摘樱桃
LeetCode1463.摘樱桃Ⅱ

股票问题

LeetCode121.买卖股票的最佳时机(贪心)
LeetCode122.买卖股票的最佳时机Ⅱ(贪心)
LeetCode123.买卖股票的最佳时机Ⅲ(前后缀分解也能做)
LeetCode188.买卖股票的最佳时机Ⅳ
LeetCode309.最佳买卖股票时机含冷冻期(状态机)
LeetCode714.买卖股票的最佳时机含手续费(状态机)

表达式匹配

LeetCode10.正则表达式匹配
LeetCode44.通配符匹配

16.4 区间DP

LeetCode312.戳气球
LeetCode375.猜数字大小Ⅱ(极小化极大)
LeetCode516.最长回文子序列

16.5 树形DP

LeetCode337.打家劫舍Ⅲ

16.6 记忆化搜索

LeetCode135.分发糖果
LeetCode329.矩阵中的最长递增路径

17.图论

LeetCode200.岛屿数量(并查集+坐标变换)
LeetCode207.课程表(拓扑排序)
LeetCode210.课程表Ⅱ
LeetCode310.最小高度树(BFS)
LeetCode332.重新安排行程(欧拉路径)
LeetCode399.除法求值(Floyd求最短路)
LeetCode547.朋友圈(并查集模板题)
LeetCode684.冗余连接(并查集)
LeetCode743.网络延迟时间(最短路模板题,可用来练习最短路算法:Dijkstra/Bellman-ford/SPFA/Floyd)
LeetCode785.判断二分图(染色法判定二分图)
LeetCode797.所有可能的路径(建图+DFS)
LeetCode1584.连接所有点的最小费用(最小生成树)
LeetCode1615.最大网络秩
LeetCode1627.带阈值的图连通性(并查集+数论)
LeetCode1631.最小体力消耗路径(并查集+坐标变换/DFS+二分)

18.树状数组

一般用树状数组能解决的问题,都可以用归并排序变形来解决
LeetCode307.区域和检索-数组可修改(树状数组模板题)
LeetCode315.计算右侧小于当前元素的个数
LeetCode327.区间和的个数
LeetCode493.翻转对
LeetCode1649.通过指令创建有序数组
剑指offer.51.数组中的逆序对

19.蓄水池抽样

LeetCode382.链表随机节点
LeetCode398.随机数索引

作者:RyanL
链接:https://www.acwing.com/blog/content/4474/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Last modification:June 20th, 2021 at 02:53 pm
如果觉得我的文章对你有用,请随意赞赏