Leetcode BFS
文章平均质量分 63
Leetcode BFS题目
努利!奋斗!
这个作者很懒,什么都没留下…
展开
-
Leetcode 818. Race Car
leetcode原创 2022-07-13 12:39:03 · 348 阅读 · 0 评论 -
Leetcode 115. Find All Possible Recipes from Given Supplies
leetcode原创 2022-07-01 09:17:48 · 121 阅读 · 0 评论 -
leetcode 2096. Step-By-Step Directions From a Binary Tree Node to Another
leetcode原创 2022-06-28 13:32:52 · 1020 阅读 · 0 评论 -
leetcode 2304. Minimum Path Cost in a Grid
leetcode原创 2022-06-23 12:45:39 · 167 阅读 · 0 评论 -
leetcode 1162. As Far from Land as Possible
leetcode原创 2022-06-14 11:09:04 · 167 阅读 · 0 评论 -
Leetcode 1376. Time Needed to Inform All Employees (python+cpp)
题目解法1:BFSclass Solution: def numOfMinutes(self, n: int, headID: int, manager: List[int], informTime: List[int]) -> int: graph = collections.defaultdict(list) # s:subordinates,m:direct manager for s,m in enumerate(manager):原创 2020-12-27 07:06:30 · 1148 阅读 · 0 评论 -
Leetcode 1391. Check if There is a Valid Path in a Grid (cpp)
题目解法:BFS就是个BFS变形。只是要注意,判断下一个位置需不需要入队,必须满足当前位置和下一个位置相互联通,需要双向。这跟普通BFS有区别class Solution {public: bool hasValidPath(vector<vector<int>>& grid) { queue<pair<int,int>> q; q.push({0,0}); int m = grid.原创 2020-12-24 05:55:25 · 309 阅读 · 0 评论 -
Leetcode 1293. Shortest Path in a Grid with Obstacles Elimination (python+cpp)
题目解法:BFS首先是个最短路径问题,所以很自然的想到要用BFS。唯一特殊的是,这边的visited数组比较特殊,某个位置是否被访问过不仅仅取决于位置本身,还取决于到达这个位置时剩下的k值,想清楚这点。然后关于k在哪里进行修改既可以在访问每一个位置时,也可以在向四个方向进行搜索时,下面两种解法都提供一下版本一class Solution: def shortestPath(self, grid: List[List[int]], k: int) -> int: m =原创 2020-12-18 14:50:34 · 931 阅读 · 0 评论 -
Leetcode 1466. Reorder Routes to Make All Paths Lead to the City Zero (python)
题目解法:这道题目有个关键是,图里面n个节点,有n-1条边,而且题目也提示了可以看作是一棵树。关键在于理解每个节点都指向0代表什么:代表的是每个以0作为根节点,每个叶节点到根节点的路径都是子节点指向父节点的。比如第一个例子,只需要保证2到0和5到0这两条路径都是子节点指向父节点的。而对于connections里面的边,一定是有一个在树里是父节点,另一个是子节点,我们只需要保证这两个节点的相对顺序即可,那么解法就很清晰了:从0节点出发,利用BFS或者DFS遍历一遍树,并且保存每个节点被访问的相对顺序原创 2020-11-18 14:09:27 · 303 阅读 · 0 评论 -
Leetcode 1519. Number of Nodes in the Sub-Tree With the Same Label (python)
题目解法:这个题目需要好好理解,首先题目没有给根几点,而只是给了根节点的值。同时提供的边是没有方向的,可能是parent指向child,也可以是child指向parent。因为只提供了根节点的值和边,所以我们只能通过BFS来遍历整棵树,通过一个visited数组保证访问方向是从parent到child的。同时关于我们要求的答案,需要maintain一个count数组,因为都是lowercase,所以每行26的长度即可,这样方便后续的更新同时这边利用了树形递归的方法,从child节点到parent原创 2020-11-05 10:40:14 · 374 阅读 · 0 评论 -
Leetcode 1530. Number of Good Leaf Nodes Pairs (python)
题目解法:将树转换成图,然后从每个leaf node开始进行BFS。虽然这种解法没有这么快,但是我觉得很标准。所有判断有没有出现过的node都用字典实现O(1)的查找时间复杂度要注意两点:不同的节点值可能会相同(nodeA,nodeB)和(nodeB,nodeA)算一个pair# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None原创 2020-11-05 06:57:41 · 402 阅读 · 1 评论 -
Leetcode 529. Minesweeper (python)
题目Let’s play the minesweeper game (Wikipedia, online game)!You are given a 2D char matrix representing the game board. ‘M’ represents an unrevealed mine, ‘E’ represents an unrevealed empty square, ‘B’ represents a revealed blank square that has no adjace原创 2020-11-02 15:34:04 · 225 阅读 · 0 评论 -
Leetcode 1631 Path With Minimum Effort (python)
Leetcode Path With Minimum Effort题目解析follow up题目解析这个题目再Leetcode 的problems里面还没有,只出现在Weekly contest 212的第3题一开始觉得这个题目是个DP,觉得两遍dp可以做,实际上思路错了,两个方向的dp是不行的。基本上看到四个方向可走的题目就是用最短路径问题来做,最短路径这边也提供两种做法,一种是Bellman ford,另一种是Dijkstra,关于两种做法的详细解释看这题 Leetcode The Ma原创 2020-10-27 09:41:43 · 1113 阅读 · 0 评论 -
Leetcode 1568. Minimum Number of Days to Disconnect Island (python)
Leetcode 1568. Minimum Number of Days to Disconnect Island题目解析:题目解析:这道题目的关键就在于,想到只有可能是0,1,2三种答案,想到了这个题目也就非常简单了class Solution: def minDays(self, grid: List[List[int]]) -> int: # check if there is more than one disconnected islands in teh原创 2020-10-27 07:44:44 · 222 阅读 · 0 评论 -
Leetcode 863. All Nodes Distance K in Binary Tree (python)
Leetcode 863. All Nodes Distance K in Binary Tree题目解析:题目解析:这道题看到固定距离寻找这种限制条件,第一个想到的就应该是BFS。所以这道题目变成了两个部分:将树转化为图,每个节点指向parent节点和左右子节点从target节点出发,BFS寻找特定距离的点值得注意的是,这边给的target是节点,所以不需要额外去寻找target节点这边将树转化为图有两种做法,一种是利用树的性质,将parent直接作为树节点的属性,代码如下:cla原创 2020-10-15 10:27:49 · 317 阅读 · 0 评论 -
Leetcode 1609. Even Odd Tree (python)
Leetcode 1609. Even Odd Tree题目解法1:BFS解法2:DFSfollow题目解法1:BFS本质上是个level order traversal再加一些判断即可,BFS版本的解法中需要额外的空间class Solution: def isEvenOddTree(self, root: TreeNode) -> bool: q = collections.deque() q.append(root) levels原创 2020-10-07 09:38:00 · 348 阅读 · 0 评论 -
Leetcode 317. Shortest Distance from All Buildings (python+cpp)
Leetcode 317. Shortest Distance from All Buildings题目解法1:BFS解法2:题目解法1:BFSbrutal force的从每一个空地出发,找与building的最短距离之和class Solution: def shortestDistance(self, grid: List[List[int]]) -> int: def helper(i,j): visited = set()原创 2020-10-03 00:56:16 · 1612 阅读 · 0 评论 -
Leetcode 773. Sliding Puzzle (python+cpp)
题目解法:BFS把board的状态看成是图的节点,相互之间的转换看成是边,那么其实这个就是找节点之间最短距离的问题,套BFS的模板就可以。需要注意的几个点:因为list是unhashable的,所以不能加到visited的set中,所以这边牵涉到list跟字符串之间的一些转换list中某个元素在摊平了之后的string中的位置对应关系。假设list中的位置是[x,y],对应string中的位置是x*num_col+y.反过来如果在string中的位置是k,那么在list中对应位置是[k//nu原创 2020-09-25 14:49:14 · 533 阅读 · 0 评论 -
Leetcode 107. Binary Tree Level Order Traversal II(python+cpp)
Leetcode 107. Binary Tree Level Order Traversal II题目解法1:DFS解法2:BFSC++版本BFS:题目Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by l...原创 2020-02-03 11:57:10 · 157 阅读 · 0 评论 -
Leetcode 261. Graph Valid Tree(python)
Leetcode 261. Graph Valid Tree题目解法1:DFS解法2:BFS解法3:并查集(union find)参考链接:题目Given n nodes labeled from 0 to n-1 and a list of undirected edges (each edge is a pair of nodes), write a function to check w...原创 2020-02-04 13:13:57 · 1816 阅读 · 0 评论 -
Leetcode 286. Walls and Gates(python+cpp)
Leetcode 286. Walls and Gates题目解法1:brutal force(TLE)解法2:逆向寻找C++版本题目You are given a m x n 2D grid initialized with these three possible values.-1 - A wall or an obstacle.0 - A gate.INF - Infinity...原创 2020-02-09 10:32:05 · 455 阅读 · 0 评论 -
Leetcode 310. Minimum Height Trees(python)
Leetcode 310. Minimum Height Trees题目解法:拓扑排序+BFS题目For an undirected graph with tree characteristics, we can choose any node as the root. The result graph is then a rooted tree. Among all possible roo...原创 2020-02-17 07:55:22 · 401 阅读 · 0 评论 -
Leetcode 690. Employee Importance(python+cpp)
Leetcode Employee Importance题目解法1:BFS题目You are given a data structure of employee information, which includes the employee’s unique id, his importance value and his direct subordinates’ id.For exam...原创 2020-02-19 13:28:29 · 140 阅读 · 0 评论 -
Leetcode 127. Word Ladder(python+cpp)
Leetcode 127. Word Ladder题目解析:题目解析:这道题目本质上是个无向图的题目,wordlist中每个单词作为一个节点,每个节点之间如果只差一个字母则有边相连。求开始节点到结束节点的最短距离。方法好像挺多的,最快的是双向BFS,但是我这边只提供最简单易懂的单向BFS,双向的方法后面再说吧。最简单的思路包含三个部分:第一是一个字典,字典的key为通用的word p...原创 2020-05-07 12:28:49 · 346 阅读 · 0 评论 -
Leetcode 310. Minimum Height Trees(python+cpp)
Leetcode 310. Minimum Height Trees题目解析:拓扑排序+BFS题目解析:拓扑排序+BFS这道题目很巧妙,需要灵活运动对于图的理解。题目原本的说法是要找到某个节点,使得以其为根节点所组成的多叉树的高度最小,那么换个方式来理解,就是要找到图中最中心的节点,以最中心的节点为根节点组成的图一定就是高度最矮的。那么如何找最中心的节点呢?这边其实思想跟934 shortest bridge的思想有点像,那倒题目是通过以一个岛为中心,利用BFS一层层向外扩散来解决的。而这边则可以原创 2020-05-17 03:04:55 · 274 阅读 · 0 评论 -
Leetcode 994. Rotting Oranges (python+cpp)
Leetcode 994. Rotting Oranges题目BFS解法1:BFS解法2:题目BFS解法1:这是个典型的BFS题目,虽然DFS也可以解,但是都已经明确说了四个方向,那么当然是BFS更make sense,要求的目标就是BFS向外扩张的次数。但是普通的BFS在搜索的时候是不会track现在所在的level的,也就是扩张的第几步,为了track这个level可以这么做。对于每个level,新建一个空的list,然后同level的位置放入同一个列表,一次搜索将同level的所有位置都搜原创 2020-06-19 09:20:46 · 280 阅读 · 0 评论 -
Leetcode 126. Word Ladder II (python+cpp)
Leetcode 126. Word Ladder II题目解析题目解析这道题目是接127的一道follow up。127是让你计算最短路径的长度,而这边则要让你大音每条最短路径。这道题目有很多的解法,每个人的思路也不一样,但是为了跟127的解法保持一致性呢,我这边采用一种比较初级的方法:BFS+backtracking。具体如下:复用127的BFS方法,但是在BFS的过程中,利用一个字典来保存每条路径,更正确的说应该是保存每个节点之间的path然后利用backtracking的方式从字典中还原创 2020-05-10 10:41:33 · 614 阅读 · 0 评论 -
Leetcode 934. Shortest Bridge (python+cpp)
Leetcode 934. Shortest Bridge题目解析:题目解析:这道题目实际上是求两个岛的最短距离。 主要的思路应该是,找到其中一个岛,然后从其中一个岛出发,利用BFS不断扩张,直到碰到第二个岛。因为bfs在扩张的时候可以理解为从岛的边界一层一层的往外扩张,而最先碰到第二个岛的那个边界点,就是离第二个岛最近的点。具体流程如下:用dfs或者bfs找到其中任意一个岛,并记录这...原创 2020-05-07 04:50:44 · 507 阅读 · 0 评论