算法刷题总结

算法刷题总结

动态规划

提高课dp题解集合

提高课题单+题解(69/220) - AcWing

背包问题模板

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
[01背包问题](2. 01背包问题 - AcWing题库)背包容量 m m m​,物品数 n n n,每个物品只能选一次,第一层循环枚举所有物品,第二层循环倒着枚举体积
完全背包问题背包容量 m m m,物品数 n n n,每个物品可以无限选第一层循环枚举所有物品,由于不限制每个物品的数量第二层循环正着枚举体积。注意公式的化简过程
[多重背包问题](6. 多重背包问题 III - AcWing题库)背包容量 m m m​,物品数 n n n​,每个物品数 s i s_i si​, o ( n ∗ m ∗ s ) o(n*m*s) o(nms)​​第一层循环枚举所有物品,第二层循环枚举每个物品数量,第三层循环倒着枚举体积
5. 多重背包问题 二进制优化背包容量 m m m,物品数 n n n,每个物品数 s i s_i si o ( n ∗ m ∗ l o g ( s ) ) o(n*m*log(s)) o(nmlog(s))​​第一层循环枚举所有物品,第二层循环枚举每个物品数量时,用二进制的枚举方法,最后再枚举一次余数,第三层循环倒着枚举体积
7. 混合背包问题 - AcWing题库
8. 二维费用的背包问题 - AcWing题库背包容量 v v v,背包限重 m m m,物品数 n n n一层循环枚举所有物品,第二层循环倒着枚举体积,第三层循环倒着枚举重量
9. 分组背包问题 - AcWing题库背包容量 m m m,物品组数 n n n,同组物品只能选一个第一层循环枚举所有分组,第二层循环倒着枚举体积,第三层循环枚举组内的物品
10. 有依赖的背包问题 - AcWing题库
11. 背包问题求方案数 - AcWing题库
12. 背包问题求具体方案 - AcWing题库

背包问题变形

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
426. 开心的金明 - AcWing题库裸01背包
487. 金明的预算方案 - AcWing题库
3499. 序列最大收益 - AcWing题库
377. 组合总和 Ⅳ背包问题求方案数的小变形
3382. 整数拆分 - AcWing题库求一个数拆成n个二进制数(可重复,包含1)相加,的方案数
139. 单词拆分 给定一个有n个字符串的字典,问模板串能否由字典里的
5269. 从栈中取出 K 个硬币的最大面值和有s个栈,栈中每个物品有不同价值,每次只能从栈顶取,取n次,使取到的价值最大

路径(数字三角形)

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
898. 数字三角形(模板)在三角形中,找一条和最大(小)的路径
1015. 摘花生 (模板)在矩阵中,找一条和最大(小)的路径
最低通行费(模板)在矩阵中,找一条和最大(小)的路径
1212. 地宫取宝 - AcWing题库在考虑路径的同时还要两个其他信息,四维状态5维循环
AcWing 275. 传纸条在矩阵中,找一来一回2条和最大(小)的路径,同一个格子不能被重复选择可以等价转换成:两个人同时从起点走到终点,中间两个路径除了起点和终点之外没有交点
Acwing1027. 方格取数在矩阵中走两次,求和最大(小)的路径,同一个格子不能被重复选择

上升子序列模型

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
895. 最长上升子序列(模板) - AcWing题库遍历每一个数,以该数作为上升子序列的结尾;对于每个数,看它前面的所有数,如果有比它小的数,前边界+1。最后再看看哪个数结尾的上升子序列最大
896. 最长上升子序列 II(优化nlogn) - AcWing题库对于每个a[i],把它接在小于a[i]的最大的数的后面,思路与dp无关;由于是往答案里插数,答案是单调递增的,所以可以用二分来找小于a[i]的最大的数
897. 最长公共子序列 - AcWing题库dp[i,j]表示a的前i个字母,和b的前j个字母的最长公共子序列长度
3510. 最长公共子序列(优化nlogn) - AcWing题库a数组无重复元素,且a,b长度相同。求数组b’,为数组b在a中出现的位置。b’的子序列,对应一个b的子序列;b’的上升子序列,对应a的一个子序列。所以b‘的最长上升子序列,对应了a和b的最长公共子序列
最大上升子序列和
3662. 最大上升子序列和 - AcWing题库
368. 最大整除子集 返回给定序列的一个最大子集,满足任意两个数满足整除关系本题的关键是如何存下这个序列
怪盗基德的滑翔翼 维护正向和反向的最长上升子序列
登山求一个先上升后下降的最长子序列
AcWing 482. 合唱队形求一个先上升后下降的最长子序列
Acwing1012-友好城市
导弹拦截求序列最少被几个最长不升子序列覆盖。思路类似于贪心求最长上升子序列。对于每个 a [ i ] , a[i], a[i],把它接在大于 a [ i ] a[i] a[i]的最小的数的后面。相当于第一问求最长不升子序列,第二问求严格最长上升子序列。因为每有一处上升子序列,说明出现了一次单调性翻转
187. 导弹防御系统 - AcWing题库求w[i]用最少的上升子序列和下降子序列完全覆盖该数组求该方案的上升子序列和下降子序列的总个数
115. 不同的子序列给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。公共子序列的变形

线性dp

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
1473. 粉刷房子 III
899. 编辑距离 - AcWing题库
3414. 校门外的树 - AcWing题库一维
821. 跳台阶 - AcWing题库每次跳一下或2下,求跳到n的方案数
435. 传球游戏 - AcWing题库一个环形上,每个人每次可以选择向左或向右传,求传回自己的方案数
403. 青蛙过河给一个石子序列,青蛙一开始可以跳1,连续跳会有加速度,求青蛙是否能从起点跳到终点
91. 解码方法求给定字符串映射成字母的方案数

状态压缩dp

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
Acwing1064国王AcWing 1064. 小国王【线性状压DP+滚动数组优化+目标状态优化】 - AcWingAcWing 1064. 小国王(Python) - AcWing
327. 玉米田 - AcWing题库
292. 炮兵阵地 - AcWing题库
NOIP2016 提高组 愤怒的小鸟
529. 宝藏 - AcWing题库
3300. 食材运输 - AcWing题库从图上某个点出发,使要经过所有指定的点的路程的最大值最小
1723. 完成所有工作的最短时间

状态机模型

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
面试翻车之——股票专题 - AcWing各种限制条件下的交易问题
AcWing 1052. 设计密码 - AcWingKMP+状态机dp(巨难)

区间dp

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
282. 石子合并 - AcWing题库把n堆石子变成一堆,最少要消耗多少体力先预处理前缀和;枚举区间长度和左端点,枚举中间的分界点k d p [ i ] [ j ] = d p [ i ] [ k ] + d p [ k ] [ j ] dp[i][j] = dp[i][k]+dp[k][j] dp[i][j]=dp[i][k]+dp[k][j]+把这两堆搬到一起的体力,即两段区间和
Acwing.1068. 环形石子合并n堆石子环形摆放把数组复制一份接在后面,在 2 n 2n 2n上求,区间长度为 n n n,左端点枚举 [ 1 , 2 n ] [1,2n] [1,2n],最后求一下哪一个长度为n的区间值为最值
320. 能量项链 - AcWing题库展开的方式只是将 a [ 1 ] a[1] a[1],补在了后面
479. 加分二叉树 - AcWing题库只给出一颗二叉树的中序遍历序列,要求还原出一颗分值最大的二叉树
1069. 凸多边形的划分虽然看起来是环形,但每个底边都是一样的只需要枚举也称长度为n的即可

数位dp

数位DP笔记(DFS做法) - AcWing

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
P2657 windy 数 [ a , b ] [a,b] [a,b]之间,不含前导零且相邻两个数字之差至少为 2的正整数
P2602数字计数 [ a , b ] [a,b] [a,b]中的所有整数中,每个数码(digit)各出现了多少次
1082. 数字游戏 [ a , b ] [a,b] [a,b]中的所有整数中,满足从左到右各位数字成小于等于的关系
1084. 数字游戏 II [ a , b ] [a,b] [a,b]中的所有整数中,求区间内各位数字和 m o d mod mod N N N为 0的数的个数
1085. 不要62 [ a , b ] [a,b] [a,b]中的所有整数中,求含有 4 或 62 的数的个数
1086. 恨7不成妻 [ a , b ] [a,b] [a,b]中的所有整数中,整数中某一位是 7;整数的每一位加起来的和是 7 的整数倍;这个整数是 7 的整数倍,为和7有关的数。求和7有关的数的平方和AcWing 1086. 恨7不成妻

树型dp

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
337. 打家劫舍 III在树上打劫,且不能连续打劫相邻的房子,求最大价值
285. 没有上司的舞会 - AcWing题库树中的点,树的每一条边的两端,至多选一个点,求有点覆盖的所有边权和最大的方案,求最大值
323. 战略游戏 - AcWing题库树的每一条边的两端,至少选择一个端点,使得所有边能被覆盖,求选择点数的最小值
Acwing323. 战略游戏树中每个点安排守卫都有不同的花费。在树中尽可能少代价,使得树中的每一个点都能被观测到
Acwing1072树的最长路径求树中的一条最长路径找到从树上的某点到叶子节点的两条最长边相加

dp处理字符串问题

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
45. 跳跃游戏 II
10. 正则表达式匹配

数学中的dp问题

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
4009. 收集卡牌 - AcWing题库dp在求数学期望中的应用
885. 求组合数 I - AcWing题库dp求组合数,利用了组合数的性质

其他dp问题

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
1214. 波动数列 - AcWing题库通过推导数学公式,利用余数的性质进行状态转移AcWing 1214. 波动数列 - AcWing(注意证明过程)
蓝桥杯 波动数列 01背包

搜索

bfs(最短路)和dfs迷宫模型

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
3230. 游戏 - AcWing题库障碍物只在特定时间段存在dis数组多维护一个时间维,存点信息用结构体
3200. 无线网络 - AcWing题库路由器有一个信号范围,给出可放路由器的位置,求至少选多少个路由器可以让网络连通点的个数少坐标范围大,用邻接表存图
3255. 行车路线 - AcWing题库有2种路,走大路和小路的疲劳值不同,问在走最短路的情况下的最小疲劳值发现点数少,小路最多只有1000条, d i s [ i ] [ j ] dis[i][j] dis[i][j]表示从起点走到i,且最后一段小路长是j的疲惫值;
AcWing 1112. 迷宫)普通的迷宫问题,注意dfs写法只能知道两个点之间是否联通
1113. 红与黑 - AcWing题库地上只有红与黑两种颜色的砖,每次只能向黑砖移动,问多少黑砖可达
AcWing 1116. 马走日嘛在棋盘上以“日”子跳,问算马可以有多少途径遍历棋盘上的所有点注意方向数组的写法,用dfs维护的步数是全局变量;要回溯,同一点有多种跳法,可能会用多次
NOIP2000单词接龙给一组单词,问接龙后的串的最大长度是多少维护一个 g [ i ] [ j ] g[i][j] g[i][j],表示,单词i和j之间的重合长度是多少
给定 n n n个正整数,将它们分组,使得每组中任意两个数互质,至少要分成多少个组?

bfs和dfs连通块模型(Flood Fill)

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
AcWing 1097. 池塘计数求矩阵中连通块的数量(8连通)Flood Fill是维护一个st矩阵,在主函数中,一遇到水就开始搜。只有一个点周围全是水的时候才继续往下搜,每搜到一个符合条件的点,就在st数组中标记一下。每次搜完就搜到一个完整的连通块,进行计数AcWing 1097. 池塘计数 - AcWingLakeCounting.cpp
Acwing1106山峰和山谷求矩阵中最高点和最底点的数量(相对应每个点周围的8个点)在搜的同时设置2个变量,判断每个点是否比周围的点大(小)并用这两个变量分别标记,在主函数中Flood Fill时统计山峰和山谷的个数Acwing1106山峰和山谷/RidgesAndValleys)
2060. 奶牛选美 - AcWing题库求矩阵中两个联通块之间的最短曼哈顿距离关键是考虑如何存下不同连通块的点,每次搜索,将当前符合的点存在一个数组中

BFS

多源bfs
题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
173. 矩阵距离 - AcWing题库求一个01矩阵每个点的与其最近的1之间的距离建立一个虚拟原点到所有起点的边权都为0,就转化成了单源最短路问题
3205. 最优配餐 - AcWing题库有多个点店家和多个顾客,求送餐的最小总路线注意最后答案是把所有顾客点距离相加乘上订单数,注意用结构体存下这个信息
3317. 重力球 - AcWing题库
双端队列bfs
题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
175. 电路维修 - AcWing题库
340. 通信线路 - AcWing题库
2019. 拖拉机 - AcWing题库把障碍物看成权值为1的边,空地看成权值为0的边,就转换成了最短路问题。由于只有2种边权,所以可以用双端队列代替djs中的堆
P4011 孤岛营救问题 - 洛谷将用有钥匙的状态压缩成一维, d [ x , y , s t a t e ] d[x,y,state] d[x,y,state]表示一个点,状态转移看成边,捡到钥匙边权为0,移动边权为1

DFS

dfs是一种比较万能,但难以理解的做法,总结有以下几个思考要点:

1.每一层需要维护哪些变量

2.哪些变量可以维护成全局变量(一般是求最值)

3.是否需要回溯(如果只需按一定限制走到叶子节点,就不需要回溯;如果不确定从根节点到叶子节点的路径是否为1个合法答案,则考虑回溯)

4.每一层有多种情况,才需要用for循环枚举;若每一层只有一种情况,且叶子节点为终点,那么这个问题一定可以递推解决

5.如果

dfs剪枝和搜索顺序优化
题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
165. 小猫爬山 - AcWing题库src/Acwing165小猫爬山
166. 数独 - AcWing题库src/Acwing166数独
167. 木棒 - AcWing题库src/Acwing167木棒
168. 生日蛋糕 - AcWing题库src/Acwing168生日蛋糕

dfs枚举满足一定条件的所有情况

题目链接题意描述题目总结c++题解python3题解
17. 电话号码的字母组合 - 力扣给定一个仅包含数字 2-9 的字符串,返回这串数能在九键输入法中打出的所有字母组合将答案维护在了dfs的遍量中
3734. 求和 - AcWing题库求在int范围内所有的各个数位只包含4或7的所有数的和dfs枚举叹为观止
241. 为运算表达式设计优先级给一个算数表达式,返回在所有运算顺序下得到的所有不同结果

dfs在非搜索类问题中的应用

排列组合类问题
题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
dfs处理表达式
题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
3483. 2的幂次方 - AcWing题库将一个数用二进制表示,输出格式类似于秦九韶的格式src/Acwing3483二的幂次方
3284. 化学方程式 - AcWing题库处理带括号类的字符串:左括号-右括号-括号内src/ccf第18次认证_3化学方程式
1225. 正则问题 - AcWing题库求一个正则表达式表达的字符串的可能的最大长度src/Acwing1225正则问题
dfs处理相同但规模变化的任务
题目链接题意描述题目总结c++题解python3题解
459. 螺旋矩阵 - AcWing题库按螺旋顺序依次将1-n填入矩阵在dfs中维护了规模的范围,范围层层递减AcWing 459. 螺旋矩阵 - AcWing

记忆化搜索

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
139. 单词拆分 剖析三种解法: DFS, BFS, 动态规划

迭代加深

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
170. 加成序列 - AcWing题库给定一个数n

图论

这里常用的邻接表,链表插入新数据时,是在数组连接端插入

单源最短路

题目链接题意描述题目总结c++题解python3题解python3题解Java题解自己的代码
849. Dijkstra求最短路 I - AcWing题库
850. Dijkstra求最短路 II - AcWing题库
853. Bellman-Ford —有边数限制的最短路给定一个 $n $个点 m m m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从 1 1 1 号点到 n n n 号点的最多经过 k k k 条边的最短距离, o ( n ∗ m ) o(n*m) o(nm)随便存图,只需要保证能遍历到所有边即可,所以用结构体存图,为了防止更新距离的过程中,用先更新的距离去更新其他距离,每次遍历要copy一下dis数组;因为有负权边,要注意正无穷的判断
851. spfa求最短路 - AcWing题库
852. spfa判断负环 - AcWing题库原理是从起点走的步数超过点数还能走,说明在有环
4196. 最短路径 - AcWing题库求最短路的一条具体路径
Acwing1129热浪
Aciwng1128.信使Acwing1128_Messager.cpp
Acwing1126最小花费Acwing1126_MinimumCost.cpp
920. 最优乘车 - AcWing题库
Acwing1135
340. 通信线路 - AcWing题库
342. 道路与航线 - AcWing题库
341. 最优贸易 - AcWing题库给定一张图,每个点都有一个价值,找出一条路径,使在路径上某个点买入,另一个点买出,赚到的最大差价,求这个差价正向,反向建2个图,正向求最大值,反向求最小值

多源最短路

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码

最小生成树

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
858. Prim算法求最小生成树 - AcWing题库
859. Kruskal算法求最小生成树 - AcWing题库

拓扑排序

算法流程:维护每个点的入度和出度,每次将入度为0的点(t)加入队列,然后进行宽搜,枚举t的所有出边。删掉出边后,若扩展点入度为0,可以继续入队。若为手写队列,队列中点的正序即为拓扑序

注意:拓扑排序后,n个点一定全部都在队列中,如果不全,说明无拓扑序

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
AcWing 1191. 家谱树模板题
AcWing 1192. 奖金给定员工的n对关系,每一对要求开资a比b大,求给所有员工开资的最小值先拓扑排序,然后根据差分约束的知识求最长路

二分图

二分图指可以把图中的点分到两个集合中,使得集合内部的点之间没有边

匈牙利算法:在二分图中求出最大匹配的个数。一对匹配指集合a和b中的两个点,一个点最多和一个点之间有一条边

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
AcWing 860. 染色法判定二分图 - AcWing
257. 关押罪犯 - AcWing题库给若干对罪犯之间的冲突关系,现在要重新分配牢房,使总冲突最小二分答案,如果大于答案的所有边可以构成一个二分图,即找到答案
P3386 【模板】二分图最大匹配 匈牙利算法模板,求二分图中最大匹配点的对数遍历所有女生,遍历所有妹子看上的男生,如果那个男生没有喜欢的人,或者那个男生喜欢的妹子有其他备胎,就将这一对匹配成功
372. 棋盘覆盖 - AcWing题库往一个矩阵中(有障碍物),不重叠的放长为 2、宽度为 1的小矩形,最多能放多少将矩阵的每个格子看成点,分奇偶建立二分图,能放一个小矩形,就是在二分图中有一组匹配,问题转化为求最大匹配个数
376. 机器任务 - AcWing题库
378. 骑士放置 - AcWing题库

LCA(最近公共祖先)

题目链接题意描述题目总结c++题解py题解Java题解go题解自己的代码
1171. 距离 - AcWing题库
P3379 【模板】最近公共祖先(LCA)
352. 闇の連鎖 - AcWing题库

强联通分量

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
受欢迎的牛
1176. 消息的传递 - AcWing题库
P1262 间谍网络

差分约束

使用场景

题目求最大(最小)值,给出一些不等关系,求最大值,用最短路,求最小值,用最长路;存在(负环)正环即为无解

使用条件

1.必须有一个绝对关系;2.必须有一个超级源点可以到达所有点

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
P5960 【模板】差分约束算法
Acwing 1169. 糖果
362. 区间 - AcWing题库
Acwing 1170. 排队布局
393. 雇佣收银员 - AcWing题库

欧拉回路

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码

环图

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
1929. 镜子田地 - AcWing题库求光路在矩阵中反射的最多次数把镜子看成点,光路看成无向边,每个点的入度只能是1或2,从外部射入的光线必然是由环和链组成的图

网络流

概念(只用人话描述,不写形式化的概念和公式)

1.流网络:指一个有向图,图中的每条边都有一个非负的容量值,且有2个超级点,源点汇点,图中至少有一条路径从源点走到汇点是联通的

数据结构

语言库语法

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码

数组模拟数据结构

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
普通队列hh = 0,tt = -1;插入:q[++tt];出队:q[hh++]
循环队列hh = 0,tt = 1;插入:q[tt++];出队:q[hh++]
数组模拟邻接表的几种写法

并查集

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
836. 合并集合 - AcWing题库
837. 连通块中点的数量 - AcWing题库在初始化并查集时每个点维护,当前点所在连通块中的点的数量

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
4310. 树的DFS - AcWing题库树的模板题,树的邻接表存储和dfs方法
103. 二叉树的锯齿形层序遍历层序遍历时,奇数层从左向右,偶数层从右向左
124. 二叉树中的最大路径和
117. 填充每个节点的下一个右侧节点指针 II
4313. 满二叉树等长路径 - AcWing题库给一颗满二叉树,每一次操作可以任意改变一条边的权值,求式根节点到每个叶子节点的权值和等长的最小操作次数

树状数组

适用范围:快速求区间和(前缀和)+单点修改

树状数组只能在连续的值域上操作,不能直接操作给定序列

题目链接题意描述题目总结题目总结c++题解python3题解Java题解自己的代码
241. 楼兰图腾 - AcWing题库求给定的坐标中,能构成多少个形状v^v时以下面那个点是第几个点划分集合,分别统计每个下端点左边和右边有多少个比它大的数,根据乘法原理把两数相乘,即为结果。对于^同理。即求每个数的前缀和和后缀和
242. 一个简单的整数问题 - AcWing题库在序列中区间修改,单点查询在tr里存差分数组,利用差分把区间修改变为单点修改
243. 一个简单的整数问题2 - AcWing题库序列中动态维护:给某个区见上的数都加一个数,和求区间和用查封维护操作1
3662. 最大上升子序列和 - AcWing题库用树状数组来维护前缀中的最大值树状数组+离散化
4316. 合适数对 - AcWing题库求某个数的动态排名

线段树

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
AcWing 1275. 最大数
245. 你能回答这些问题吗 - AcWing题库线段树模板(区间查询+单点修改,不用pushdown;区间查询+区间修改需要pushdown)。求最大连续子段和求最大连续子段和,需要维护前缀最大和,后缀最大和,区间最大和,区间和
246. 区间最大公约数 - AcWing题库利用了差分的性质和欧几里得(gcd)的性质 gcd(a,b)=gcd(a,b−a),将区间修改转换为单点修改,省去了pushdown操作

Trie树

题目链接题意描述题目总结c++题解python3题解Java题解Java题解自己的代码
前缀统计
208. 实现 Trie (前缀树)注意数组版和节点版的写法
3485. 最大异或和
161. 电话列表 - AcWing题库
144. 最长异或值路径 - AcWing题库输上的异或路径

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
128. 编辑器 - AcWing题库用两个栈顶相对的栈处理中间问题

单调栈

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
830. 单调栈 - AcWing题库单调栈模板
131. 直方图中最大的矩形 - AcWing题库单调栈模板,求在连续直方图中,面积最大的矩形AcWing 131. 直方图中最大的矩形 - AcWing
152. 城市游戏 - AcWing题库单调栈模板,求只含特定字符的子矩阵的最大面积
85. 最大矩形 - 力扣)
41. 包含min函数的栈 - AcWing题库可以在O(1)时间内检索出最小元素的栈
3516. 最大面积 - AcWing题库

单调队列(滑动窗口)

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
154. 滑动窗口 - AcWing题库
239. 滑动窗口最大值
480. 滑动窗口中位数
3. 无重复字符的最长子串map做滑动窗口统计出现次数
76. 最小覆盖子串map做滑动窗口统计出现次数
1238. 日志统计 - AcWing题库
1969. 品种邻近 - AcWing题库

链表

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
19. 删除链表的倒数第 N 个结点
206. 反转链表必须死记住
92. 反转链表 II
23. 合并K个升序链表 - 力扣
86. 分隔链表 用2个中间节点分别把大数和小数连在后面,最后合并两个链表
234. 回文链表 - 力扣快慢指针找中点+反转后半个链表+比较两个链表的值

奇妙的优化

题目链接题意描述题目总结题目总结c++题解c++题解python3题解python3题解Java题解Java题解自己的代码自己的代码
1210. 连号区间数 - AcWing题库通过序列是排列的乱序,优化判断每个区间是否连号AcWing 1210. 连号区间数 - AcWing

奇思妙想

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
5253. 找到指定长度的回文数给你一个整数数组 q和一个 正 整数 n,请你返回一个数组 res,其中 res[i] 是长度为 n的 正回文数 中第 q[i] 小的数字,如果不存在这样的回文数,则为 -1
4395. 最大子矩阵 - AcWing题库

前缀和与差分

一维前缀和

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
795. 前缀和 - AcWing题库模板
1310. 子数组异或查询 异或运算也具有前缀和的性质
523. 连续的子数组和利用前缀和和同余性质优化区间的枚举
1230. K倍区间 - AcWing题库和连续子数组和是同一题,问的是个数
1236. 递增三元组 - AcWing题库先枚举b[i]数组,用前缀和+大数组在a[]数组中找有多少个数比b[i]小,在c[]数组中找有多少个数比b[i]大
然后两个数相乘
AcWing 1236. 递增三元组 (二分+双指针+前缀和) - AcWing
1913. 公平摄影 - AcWing题库找奇偶数个数相同的最长连续区间的长注意题目要求同一连续的数也是 可以的

二维前缀和

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
邻域均值统计有多少个正方形区域的平均值小于给定值;注意计数平均值要用乘法
99. 激光炸弹 - AcWing题库(原地前缀和)统计一个稀疏矩阵和最大的一个方形区域;注意前缀和都是从1开始,对稀疏矩阵坐标要进行+1处理
363. 矩形区域不超过 K 的最大数值和(前缀和+二分优化)

一维差分

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
797. 差分 - AcWing题库差分模板:
给一个区间所有数同时加上一个数;差分数组的每个数的前缀和就是原数 ;所以改变差分数组的一个数,所有求前缀和时用到这个数的都会受到影响
100. 增减序列 - AcWing题库每次给任意一个区间所有数+1或者-1,求多少次操作后,所有数相等;本题要理解差分数组本身的含义:表示原数组中每两个相邻数的差;将原数组都变成一样等价于将差分数组下标大于1的数都变为0;所以优先选择一对(正,负)操作AcWing 100. IncDec序列 - AcWing
101. 最高的牛 - AcWing题库已知数组中的最大数,和一些数之间的关系,求原数组每个数的最大可能值AcWing 101. 最高的牛 - AcWing
2014. 岛 AcWing题库
4007. 非零段划分 AcWing题库已知数组中的每个数的值,和数组中的最大数,求一些数之间的关系
1922. 懒惰的牛 - AcWing题库求长度不超过2k的最大区间和虽然题目给的是单点的信息,但这个点影响的是附近2k的区间,所以可以用差分改变所有区间内的数,如果可吃到多个点,点必然会被区间影响,最后找到值最大的点即为答案

二维差分

题目链接题意描述题目总结题目总结c++题解python3题解Java题解自己的代码
798. 差分矩阵 - AcWing题库二维差分模板:
给一个子矩阵所有数同时加上一个数

数学问题

数论

题目链接题意描述题目总结题目总结题目总结c++题解c++题解c++题解python3题解python3题解python3题解Java题解Java题解Java题解自己的代码自己的代码
2068. 整数拼接 - AcWing题库通过同余的性质来预处理一个表
,优化枚举
AcWing 2068. 整数拼接–(m-a[i]%m)%m的解释 - AcWing

质数约数相关

题目链接题意描述题目总结题目总结c++题解c++题解python3题解python3题解Java题解Java题解自己的代码自己的代码
866. 试除法判定质数 - AcWing题库
867. 分解质因数 - AcWing题库列出一个数所有的质因子和每个质因子的次数, o ( n ) o(\sqrt{n}) o(n )因为从2开始遍历,且每遍历到一个因子,就把该因子除干净,除的次数就是因子的次数,所以实际上遍历到的都是质因子
868. 筛质数 - AcWing题库朴素筛(弃用)
埃式筛法, o ( n ) o(n) o(n)在遍历从0到n的所有数的过程中,每找到一个质数,就把它的质倍数全部标记
869. 试除法求约数 - AcWing题库
870. 约数个数 - AcWing题库
97. 约数之和 - AcWing题库
872. 最大公约数 - AcWing题库b ? gcd(b,a%b):a;
196. 质数距离 - AcWing题库求一个区间[L,R]内的所有质数;区间长度校,L,R很大先找出[2,x],区间长度为[L,R]的所有质数,然后筛掉所有[L,R]间[2,x]的倍数;注意找起筛点倍数时要上取整,且不能小于2倍

组合数学

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
885. 求组合数 I - AcWing题库
886. 求组合数 II - AcWing题库
887. 求组合数 III - AcWing题库
888. 求组合数 IV - AcWing题库

矩阵乘法

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码

数学概率与期望

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
4009. 收集卡牌 - AcWing题库共n种卡牌,给出获得每一张卡牌的概率,且用k张相同的牌可以换任意一张牌,求集齐全部卡牌的概率

矩阵快速幂

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码

高斯消元

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码

二分

二分优化其他算法

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
363. 矩形区域不超过 K 的最大数值和二分优化前缀和

由答案的单调性二分答案

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
730. 机器人跳跃问题 - AcWing题库只要答案大于等于最大值,答案一定满足要求
1011. 在 D 天内送达包裹的能力
1482. 制作 m 束花所需的最少天数
3745. 牛的学术圈 I - AcWing题库
257. 关押罪犯 - AcWing题库满足性质的所有点都在一个合法的二分图中
1659. 社交距离 I - AcWing题库

浮点数二分

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
790. 数的三次方根 - AcWing题库注意整数二分和浮点数二分模板的区别
102. 最佳牛围栏 - AcWing题库求一段长度至少为f的不定长区间的最大和可以在前缀和数组上遍历后一个指针,前一个指针取遍历过的最小值AcWing 102. 最佳牛围栏 - AcWing

由数的性质二分

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
113. 特殊排序 - AcWing题库大小不具备传递性,比如a < b,b < c 并不能推出a < c;本题与贪心优化最长上升子序列模型一样,在答案中找<i的最大数,将新数插入到这个位置

贪心

区间类问题

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
905. 区间选点 - AcWing题库请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。求最小点的数量将每个区间按照右端点从小到大进行排序;如果本次区间和上次区间无交集, ed < range[i].l说明需要选择一个新的点, res ++ ; ed = range[i].r;
908. 最大不相交区间数量 - AcWing题库请你在数轴上选择若干区间,使得选中的区间之间互不相交将每个区间按照右端点从小到大进行排序;依次遍历排序好的区间。如果区间的左端点大于当前放置点的位置,说明当前点无法覆盖区间,则把点的位置更新成该区间的右端点,表示在该区间的右端点放置一个新的点,同时更新点的个数
906. 区间分组 - AcWing题库请你将这些区间分成若干组,使得每组内部的区间两两之间(包括端点)没有交集,并使得组数尽可能小。
907. 区间覆盖 - AcWing题库从前往后枚举每个区间,在所有能覆盖start的区间中,选择右端点的最大区间,然后将start更新成右端点的最大值将所有区间按照左端点从小到大进行排序
4307. 数字重构 - AcWing题库

其他

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
55. 连续子数组的最大和 - AcWing题库数组里的数有正有负。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。从前往后贪心,如果当前数的前缀和为负,说明当前区间一定对答案无贡献,答案的区间就更新为下一个点开始的区间;如果所有数都为负,该方法也能找到最大的负数
126. 最大的和 - AcWing题库求二维矩阵中和最大的一个子矩阵枚举左上角和右下角是 o ( n 4 ) o(n^4) o(n4);所以,先预处理每一列的前缀和,枚举上下两个边界,将边界中的所有行通过列前缀和压缩为一行,问题就转换为55. 连续子数组的最大和 ,整体时间复杂度为 o ( n 3 ) o(n^3) o(n3)
179. 最大数由给定数组里的数字能组成的最大的数是多少
1453. 移掉K位数字 给1个数字,可以删掉任意k位,使得到的数最小该题的思路是先删除数串中的逆序对,再从后往前删除,去除前导零,即可得到最小值AcWing 1453. 移掉K位数字 - AcWing

归并

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
787. 归并排序 - AcWing题库
788. 逆序对的数量 - AcWing题库求数组中每个数右边比它小的数的个数,并求和其实就是求排序过程中有多少次交换逆序对的数量 【离散化/树状数组】
1934. 贝茜放慢脚步 - AcWing题库有2种记录:时间和距离;在跑1000米的过程中,每当到记录中的时间或距离就减速一次,问多长时间跑完1000米用时间和距离数组从前向后进行二路归并,判断条件从比较数的大小变成了比较每个时间差有没有走到给出的距离
36. 合并两个排序的链表 - AcWing题库将两个有序链表合并为1个有序链表
264. 丑数 II 请你找出并返回第 n 个 只包含质因数 2、3 和或 5 的正整数。2,3,5三路归并

字符串哈希

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
187. 重复的DNA序列

小模拟

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
1241. 外卖店优先级 - AcWing题库
1001. 网格照明用哈希表存储每行,列,左对角线,右对角线的灯的情况,保证每次操作都是o(1)

括号序列类

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
1003. 检查替换后的词是否有效

大模拟

按照要求模拟字符串

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
3219. 模板生成系统 - AcWing题库
3244. Markdown - AcWing题库
3199. 命令行选项 - AcWing题库

模拟过程

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码

启发式搜索

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
CF2C Commentator problem给出三个互不相交的圆,求一个点使得到这三个圆的切线夹角相同。模拟退火

其他基础算法专题

中位数

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
104. 货仓选址 - AcWing题库求数轴上一个点到其他所有点的距离值和最小求序列的中位数就是所求的点
122. 糖果传递 - AcWing题库每个点只能向左右两边传递,求环形上使所有点糖果数都相等的最小代价
105. 七夕祭 - AcWing题库矩阵上的环形传递问题行和列是相互独立的行列分别求一遍环形传递

KMP

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
28. 实现 strStr()kmp模板
4312. 出现次数 - AcWing题库求子串在原串的某一区间出现了多少次kmp预处理+前缀和

位运算

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
73. 数组中只出现一次的两个数字 异或得到 x^y;取 x与y中第k位为1的数;将数分为两个集合,第k位为1的集合和第k位不是1的集合;其中x y分别在这两个集合,且相同的元素是在同一个集合里面;于是将其转化成了求重复数字中的单个数值的问题
190. 颠倒二进制位 - 力扣将一个二进制数翻转
998. 起床困难综合症 - AcWing题库

子序列有关问题

题目链接题意描述题目总结c++题解python3题解Java题解自己的代码
6035. 选择建筑的方案数给定1个01字符串,求子序列中101010的数量
1884. COW - AcWing题库给定一个只有cow3种字母的字符串,求子序列中cow的数量
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值