![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LC DFS、BFS与图论
文章平均质量分 54
Leetcode与Lintcode DFS、BFS与图论
记录算法题解
算法与数学
展开
-
【Leetcode】2127. Maximum Employees to Be Invited to a Meeting
我们定义一个环上的点的“粉丝团“这样的概念。容易知道对于任意一个环上的点,它可能有粉丝团,也可能没有,即使有,也可能有多个。这个图事实上可以分解为若干个不相交的子图,使得每个子图要么是环,要么是环加上环上每个点的所有粉丝团。号人喜欢的人的编号(他不能喜欢自己)。有一个圆桌,想安排若干人上桌,每个人必须要和自己喜欢的人坐一起。的环,他们只能单独上桌,因为他们之中只要有一个人上桌,那每个人的左右两边的人都确定了。的环,这些环可以都上桌,并且带上两个人各自的人数最多的粉丝团上桌。之外的所有点,就称为点。原创 2024-07-18 03:22:38 · 821 阅读 · 0 评论 -
【Leetcode】2812. Find the Safest Path in a Grid
一条路径的安全系数定义为其包含的所有点的安全系数的最小值。问安全系数最大的路径的安全系数。思路是多源BFS+二分答案。先用多源BFS求出每个位置的安全系数,然后再二分答案,对于每个可能的答案。可以直接暴力搜索所有路径,但是需要做记忆化,记忆一下每个点出发是否存在安全系数大于等于。代表空地,每个位置的安全系数为其和与其曼哈顿距离最近的贼的曼哈顿距离。的路径,即求每个点的安全系数都大于等于。,判断一下是否存在安全系数大于等于。的路径,减少重复搜索。原创 2024-01-07 09:50:51 · 840 阅读 · 0 评论 -
【Leetcode】1263. Minimum Moves to Move a Box to Their Target Location
那么初始状态已知,而其能转移到的状态可以分成两种情况,首先考虑人走一步,那人有三个方向可以走(去掉出界、障碍物等等非法情况),转移的代价为。(因为箱子没动),然后再考虑箱子走一步,这种情况只有在人恰好在箱子旁边的时候才能转移到,并且箱子移动到的地方不能非法,这种转移的代价为。除了出界、障碍物以外的位置,人和箱子都可以进入。求将箱子推到目标位置的箱子的最少移动步数。图上求最短路,可以用双端队列BFS来做。代表障碍物,人和箱子都不能进入,思路是双端队列BFS。代表箱子的初始位置,代表箱子的目标位置,原创 2023-11-27 16:07:04 · 112 阅读 · 0 评论 -
【Leetcode】1345. Jump Game IV
直接BFS即可,BFS的时候要分层。要用一个哈希表记录一下每个数出现在了哪些位置。的时候,每一步可以向左右走一步(当然不能出界),也可以走到任意一个值等于。的位置的最短路求出来,而这些位置再也不会走了,所以可以直接将。的位置(不能不动)。原创 2023-10-23 13:33:13 · 73 阅读 · 0 评论 -
【Leetcode】224. Basic Calculator
题目地址:https://leetcode.com/problems/basic-calculator/给定一个中缀表达式,求其值。表达式中只含非负整数,加减乘除和左右小括号。具体算法参考https://blog.csdn.net/qq_46105170/article/details/106209367。代码如下:import java.util.ArrayDeque;import java.util.Deque;import java.util.HashMap;import java.ut原创 2020-05-20 10:26:37 · 175 阅读 · 1 评论 -
【Leetcode】1106. Parsing A Boolean Expression
题目地址:https://leetcode.com/problems/parsing-a-boolean-expression/给定一个表达式,该表达式是个类似于前缀表达式的布尔表达式,其中't'代表true,'f'代表false,其定义是递归的:1、单个't'或者'f'是个表达式;2、如果expr是个表达式,则'!(expr)','&(expr,expr,...)'和'|(expr,expr,...)'都是个表达式。求该表达式的值。思路和表达式求值类似,只不过这里不需要考虑优先级的问题原创 2021-05-11 03:00:51 · 265 阅读 · 0 评论 -
【Leetcode】1096. Brace Expansion II
同理,本题也是一样的步骤。字符串集合的加法和乘法已经定义了,加法为集合取并,乘法是取笛卡儿积形成新的字符串集合。,则视为是集合乘法,即笛卡儿乘积。的时候,递归求解与这个左括号配对的右括号包围起来的部分的值,求好了之后,看一下这一段的前面的符号,如果前面无符号,或者不是。该表达式只含加法、乘法和括号,和普通数字的含加法乘法括号的求值是一样的。,则为乘法,否则是加法;(空集为加法单位元,只含空串的集合为乘法单位元),并且一开始的运算符规定为乘法。包围的一段是一个集合,集合之间如果是直接连接而不是隔着一个。原创 2023-10-16 14:31:39 · 45 阅读 · 0 评论 -
【Leetcode】2065. Maximum Path Quality of a Graph
可以求得这一圈的总边权和总点权,其中点权不重复计算,同一点可以访问多次。规定一个最大总边权,问在总边权不超过给定最大总边权的情况下,最大总点权是多少。给定一个带权无向图,每条边权值为正,每个点也带非负点权。的点出发,周游一圈回到。时间复杂度指数级,空间。原创 2023-10-15 02:45:40 · 51 阅读 · 0 评论 -
【Leetcode】397. Integer Replacement
如果其是奇数,可以将其加。时空复杂度由具体数据决定。是偶数,可以将其除以。原创 2023-01-24 17:00:47 · 192 阅读 · 0 评论 -
【Leetcode】2035. Partition Array Into Two Arrays to Minimize Sum Difference
个数字的所有组合的和,key是数字个数,value是和的所有可能性,然后再暴力枚举前。,要求将其分为两部分,使得两部分各自和作差的绝对值最小,返回这个最小的绝对值。个数字,为了二分方便,哈希表的value用set来存;最近的数,这个可以用lower_bound来做。个数字的所有组合,如果这个组合含。个数字的某个组合的和是。原创 2023-01-20 15:27:51 · 360 阅读 · 0 评论 -
【Leetcode】1680. Concatenation of Consecutive Binary Numbers
的二进制数连接起来得到的数的十进制模。原创 2023-01-20 13:54:23 · 189 阅读 · 0 评论 -
【Leetcode】818. Race Car
可以用BFS来解决。我们可以将连续的同方向的加速分隔出来,那么每次走的距离是。问题即是要用若干个形如那样的整数的加减凑出。,而这样的数的二进制表示即为连续的若干个。(速度变为负数的意思是方向反向)。的位置是不划算的,同样如果走到。至少要多少步,每一步可以走到。问其至少多少步能到达。原创 2023-01-08 05:18:25 · 236 阅读 · 0 评论 -
【Leetcode】2093. Minimum Cost to Reach City With Discounts
https://leetcode.com/problems/minimum-cost-to-reach-city-with-discounts/description/给定一个nnn个顶点mmm条边的带权无向图,顶点编号0∼n−10\sim n-10∼n−1。要从000走到n−1n-1n−1,再给定ddd次机会,每次走一条边的时候可以使用111次机会使得边权以原来的一半走过。问最短路长度。分层图最短路问题,将(u,g)(u, g)(u,g)看成一个整体,uuu为顶点,ggg为还剩多少次“半价”的机会。那么问原创 2022-12-03 17:26:14 · 192 阅读 · 0 评论 -
【Leetcode】805. Split Array With Same Average
个数,进行DFS,用哈希表存一下其所有子集的和以及每个子集的元素个数(这是为了排除掉平凡子集),如果前。这个是背包问题,通常来讲,这种题目可以用动态规划做,但此题的数据范围较为特殊,的范围较大,如果用动态规划容易爆空间。与划分无关,所以我们其实就是要求是否存在一个子集,其平均值等于。问是否能将其划分为两个非空子集,使得两个子集的平均数相等。暴力枚举完毕没发现解,则无解。了,那就说明有解,可以提前结束;的非平凡子集(非平凡的意思是不能为空,也不能为。乘以一个系数,使其每个数都为整数。,那么问题即转化为问。原创 2022-11-28 03:57:54 · 242 阅读 · 0 评论 -
【Leetcode】1824. Minimum Sideway Jumps
可以将所有位置看成是图上的点,代价视为边权,则代价只有。图上的最短路问题,可以用双端队列BFS来做,参考。的路,可以视为三条平行线,给定一个长。变线,只是不能跳到障碍物上。的第二条平行线出发,可以以代价。向右跳一步,也可以以代价。原创 2022-11-25 05:28:38 · 293 阅读 · 0 评论 -
【Leetcode】1593. Split a String Into the Max Number of Unique Substrings
直接暴力枚举即可,可以用字符串哈希加速。,问最多能将其划分为多少个互不相同的非空子串。原创 2022-11-24 02:01:45 · 112 阅读 · 0 评论 -
【Leetcode】1079. Letter Tile Possibilities
思路是DFS,每一层枚举当前我们要添加在尾部的字符。最关键的问题是去重,去重的思路和。DFS树里每一个节点都是个方案,但最后要把空方案去掉。,求其所有不同的非空子排列的个数。原创 2022-11-06 06:02:58 · 85 阅读 · 0 评论 -
【Leetcode】1210. Minimum Moves to Reach Target with Rotations
它每一步可以向右移动一格(整个身子向右平移),也可以向下移动一格(也是整个身子平移),只要不碰到障碍物;如果其朝向右,其也可以绕着其尾巴顺时针旋转。,但旋转的必要条件不但是它的终止位置不能有障碍物,其扫过的格子也不能有障碍物(即尾巴右下一格的位置)。问最少多少步可以爬到终点。,类似的,其朝向下的时候,也可以绕着尾巴逆时针旋转。有一条蛇,其占两个格子,其一开始在。可以将其尾巴位置和头的朝向做成一个三元组。原创 2022-11-05 05:46:30 · 546 阅读 · 0 评论 -
【Leetcode】1334. Find the City With the Smallest Number of Neighbors at a Threshold Distance
的距离到达的点最少的那个点的编号。如果多个点满足要求,则返回编号最大的那个。可以用多点对最短路的Floyd算法先求出两两的最短路长度,参考。,然后直接暴力枚举每个点即可。个顶点的无向非负权图,顶点编号。,问所有点中能走不超过。原创 2022-11-03 15:08:06 · 102 阅读 · 0 评论 -
【Leetcode】2359. Find Closest Node to Given Two Nodes
所能到达的顶点和距离,然后枚举一下哪个顶点满足要求。可以两遍BFS,分别求一下。阶无权有向图,顶点编号。都能到达的点,则返回。原创 2022-09-20 02:35:09 · 319 阅读 · 0 评论 -
【Leetcode】2415. Reverse Odd Levels of Binary Tree
给定一个完美二叉树(即每层都填满),要求将第偶数层的数值做翻转。可以BFS,按定义做即可。原创 2022-09-19 10:38:56 · 284 阅读 · 0 评论 -
【Leetcode】1377. Frog Position After T Seconds
为根将整棵树看成有根树的话,每步走的时候,是不会走回头路的。开始出发,每次等概率跳到相邻的未访问过的节点。或者接下来无路可走,则返回概率;能走到当前节点概率。思路是DFS,可以看出如果以。了,判断一下,如果步数恰好是。个节点的无向树,节点编号。次跳跃,恰好处于节点。,则说明走不到,返回。原创 2022-09-11 08:12:15 · 128 阅读 · 0 评论 -
【Leetcode】1307. Verbal Arithmetic Puzzle
枚举每个字母被映射成哪个数字,同时排除掉非法情形。的映射,使得将所有单词看成数字的时候,,题目保证只含英文大写字母,并且。问是否能构造一个大写字母到。映射不可使得单词含前导。时间复杂度指数级,空间。原创 2022-09-04 03:09:04 · 240 阅读 · 0 评论 -
【Leetcode】1306. Jump Game III
可以直接DFS,DFS的时候标记一下走过的位置,以防重复访问。问最终是否能走到满足某个。原创 2022-09-01 14:32:19 · 112 阅读 · 0 评论 -
【Leetcode】2360. Longest Cycle in a Graph
当然可以直接用Tarjan求一下最大的强联通分量。由于每个点只有一条出边,所以每个点只会存在于一个环中,从而可以直接模拟,直接从每个点出发,并且做标记,同时用一个哈希表记录步数。个点的有向图,每个点最多只有一条出边。给定每个点的出边指向的点,如果不存在则以。求长度最大的环的长度。...原创 2022-07-31 13:21:22 · 261 阅读 · 0 评论 -
【Leetcode】473. Matchsticks to Square
代表若干个小木棍的长度,要求将这些小木棍拼成一个大正方形,使得所有的小木棍都恰好用完。我们可以从长到短枚举当前应该放哪个小木棍,剪枝可以参考链接。时间复杂度指数级,空间。原创 2022-07-31 05:27:37 · 128 阅读 · 0 评论 -
【Leetcode】2115. Find All Possible Recipes from Given Supplies
给定一个食物列表(以字符串数组形式给出),给出每个食物需要的原材料,以及已经有的原材料,每个原材料可以视为无限供应。有的食物也可以作为某另一个食物的原材料。求所有可以被做出来的食物。题目保证食物与原材料的依赖关系没有环。可以将每个原材料和食物视为图的点,当食物需要某个原材料的时候,从该原材料向食物连边,然后从已有的原材料出发做拓扑排序,队列里出现过的元素即为可以做出来的食物。.........原创 2022-07-15 23:24:32 · 252 阅读 · 0 评论 -
【Leetcode】1976. Number of Ways to Arrive at Destination
题目地址:https://leetcode.com/problems/number-of-ways-to-arrive-at-destination/给定一个nnn个顶点的无向带权图,顶点编号0,1,...,n−10,1,...,n-10,1,...,n−1。求000到n−1n-1n−1最短路的条数。用Dijkstra算法,可以在Dijkstra树上按拓扑序做一下递推。思路参考https://blog.csdn.net/qq_46105170/article/details/121900779。代码如原创 2022-05-01 18:28:21 · 265 阅读 · 0 评论 -
【Leetcode】1462. Course Schedule IV
题目地址:https://leetcode.com/problems/course-schedule-iv/给定一个nnn个点的有向无环图,点的编号是0,1,...,n−10,1,...,n-10,1,...,n−1,再给定若干询问,每次询问(a,b)(a,b)(a,b)问能走到bbb的点里是否含aaa。思路是拓扑排序,用BFS预处理出每个点的祖先都有哪些节点,然后应答询问。参考https://blog.csdn.net/qq_46105170/article/details/124528418。代码原创 2022-05-01 16:50:01 · 257 阅读 · 0 评论 -
【Leetcode】2192. All Ancestors of a Node in a Directed Acyclic Graph
题目地址:https://leetcode.com/problems/all-ancestors-of-a-node-in-a-directed-acyclic-graph/给定一个含nnn个点的有向无环图,每个点编号为0,1,...,n−10,1,...,n-10,1,...,n−1。对于每个点,求出其所有祖先节点(祖先节点指的是能走到这个点的所有点,不包含其本身),并且要按照点的编号从小到大排序。可以用BFS版本的拓扑排序。设点kkk的祖先节点集合为f(k)f(k)f(k),那么对于任意点vvv,原创 2022-05-01 16:32:43 · 264 阅读 · 0 评论 -
【Lintcode】1382 · High Capacity Backpack
题目地址:https://www.lintcode.com/problem/1382/description给定一个背包,容量sss,再给定nnn个物品,各自体积是c[i]c[i]c[i],各自价值是v[i]v[i]v[i]。问在不超过背包容量的情况下,取物品的最大价值是多少。每个物品限取一次。数据中,容量sss和物品的体积和价值取值范围是1≤s,v[i],c[i]≤10131\le s,v[i],c[i]\le 10^{13}1≤s,v[i],c[i]≤1013,而1≤n≤311\le n\le 31原创 2022-04-24 11:50:02 · 275 阅读 · 0 评论 -
【Leetcode】433. Minimum Genetic Mutation
题目地址:https://leetcode.com/problems/minimum-genetic-mutation/给定两段基因序列sss和eee,再给定一个字符串数组AAA,从sss开始,每次允许将某个字母变为'A', 'C', 'G', 'T'其中一个,并且要求变化完成之后的字符串在AAA里,问至少要多少步可以变为eee。可以用双向BFS。代码如下:import java.util.*;public class Solution { public int minMutation(原创 2022-01-31 03:11:57 · 505 阅读 · 0 评论 -
【Lintcode】472. Binary Tree Path Sum III
题目地址:https://www.lintcode.com/problem/472/给定一棵二叉树,求所有的和为给定值ttt的路径,路径可以以任一点出发到任一点结束。可以DFS套DFS,外层DFS枚举每个点为出发点,内层DFS枚举所有从出发点出发的路径,如果和为ttt了则将路径记录一下。代码如下:import java.util.ArrayList;import java.util.List;public class Solution { /* * @param root:原创 2021-09-05 04:26:09 · 252 阅读 · 0 评论 -
【Lintcode】1848. Word Search III
题目地址:https://www.lintcode.com/problem/1848给定一个m×nm\times nm×n的字符矩阵,题目保证只含英文小写字母。再给定一个字符串列表,问在该矩阵里最多可以同时找到多少个列表中的字符串,要求矩阵中每个字母只使用一次,并且列表中的字符串每个也只能用一次(”找到“的意思是,从某个位置开始每次只能上下左右走一步的情况下,能走出这个字符串)。思路是DFS。首先每个方案一定可以这样枚举出来,先按每个字符串的出发位置排序,行小的在前,行一样列小的在前,无论如何可以排列原创 2021-08-23 03:01:20 · 269 阅读 · 0 评论 -
【Leetcode】967. Numbers With Same Consecutive Differences
题目地址:https://leetcode.com/problems/numbers-with-same-consecutive-differences/给定两个正整数nnn和kkk,要求返回所有长nnn的正整数,使得每个数的每两个相邻位置的差的绝对值恰好是kkk。原创 2021-08-08 23:58:00 · 113 阅读 · 0 评论 -
【Leetcode】756. Pyramid Transition Matrix
题目地址:https://leetcode.com/problems/pyramid-transition-matrix/给定一个初始字符串sss,然后给定若干字符串组成的数组AAA,其中A[i]A[i]A[i]长度都等于333,意思是前两个字母可以拼出后一个字母。从sss出发,每相邻两个字母,按照AAA的设置,就可以拼出一个新字母,然后形成一个新字符串。问这样循环往复,最后能否得到一个长111的字符串。题目保证字母只有A', 'B', 'C', 'D', 'E', 'F', 'G'。直接暴力枚举即可原创 2021-08-07 00:48:25 · 184 阅读 · 0 评论 -
【Leetcode】753. Cracking the Safe
题目地址:https://leetcode.com/problems/cracking-the-safe/给定一个正整数nnn和一个正整数kkk,题目保证k<10k<10k<10,要求给出一个序列sss,只含0∼k−10\sim k-10∼k−1,使得任意长nnn的只由0∼k−10\sim k-10∼k−1组成的序列都是sss的子串。返回任一符合要求的答案即可。其实是欧拉回路问题。一共有knk^nkn种可能的序列,首先理论上,如果我们能使得,除了前n−1n-1n−1位长度不够,但是从原创 2021-08-06 23:18:32 · 137 阅读 · 0 评论 -
【Lintcode】1257. Evaluate Division
题目地址:https://www.lintcode.com/problem/1257/给定若干个方程,方程形式是a/b=za/b=za/b=z,zzz是个非零实数。要求应答一些询问,每次询问某两个变量的商。题目保证询问不会有除以000的错误,并且方程不会有矛盾。如果解无法得出则返回−1-1−1。...原创 2021-08-05 23:55:41 · 126 阅读 · 0 评论 -
【Leetcode】247. Strobogrammatic Number II
题目地址:https://leetcode.com/problems/strobogrammatic-number-ii/给定一个nnn,返回所有的长nnn的非负整数,其与其旋转180°180\degree180°得数相等。以字符串列表的形式返回。思路是递归。n=0,1n=0,1n=0,1的时候答案就是空串、0, 1, 8。对于别的nnn,我们可以先求n−2n-2n−2的答案,然后前后加上(1,1) (6,9) (8,8) (9,6)还有(0,0),但(0,0)只能在内层递归里加,在最外层的递归里不能原创 2021-08-05 23:21:41 · 203 阅读 · 0 评论 -
【Leetcode】1765. Map of Highest Peak
题目地址:https://leetcode.com/problems/map-of-highest-peak/给定一个m×nm\times nm×n的0−10-10−1矩阵AAA,要求构造一个新的矩阵CCC满足如下要求:1、CCC的所有元素都非负;2、若A[i][j]=1A[i][j]=1A[i][j]=1则C[i][j]=0C[i][j]=0C[i][j]=0;3、对于CCC中相邻的元素,它们的差的绝对值最多是111。这里的相邻指的是四相邻。同时要求CCC的最大值最大,求CCC。其实只需要从原创 2021-06-05 04:06:18 · 181 阅读 · 0 评论