![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图
BlackMan_阿伟
不积跬步无以至千里
展开
-
《Leetcode of July》
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def distanceK(self, root: TreeNode, target: TreeNode, k: int) -> Li...原创 2021-07-28 11:41:19 · 139 阅读 · 0 评论 -
【图的遍历】BFS+DFS(递归&非递归)
表示图的关系一般使用邻接矩阵或者邻接表,在这里我们用邻接表进行表示图的关系graph={ 'A':['B','C'], 'B':['A','C','D'], 'C':['A','B','D','E'], 'D':['B','C','E','F'], 'E':['C','D'], 'F':['D']}遍历主要是BFS和DFS,DFS这里又分为递归和非递归两种,因为递归的有时候会超出递归的最大深度。 BFS def BFS(graph..原创 2021-04-19 15:33:10 · 679 阅读 · 1 评论 -
LeetCode——1319.连通网络的操作次数
class Solution: def makeConnected(self, n: int, connections: List[List[int]]) -> int: #我们可以通过节点集合 VV 唯一地描述一个连通分量: #例如在题目给出的样例 11 中,有两个连通分量,如果让三个连通分量相连至少需要n-1条线 #样例 22 中,有三个连通分量,如果需要让连接的话那就需要n-1条线 #因此题目...原创 2021-01-23 22:20:51 · 205 阅读 · 2 评论 -
LeetCode——1584. 连接所有点的最小费用
class Solution: def minCostConnectPoints(self, points: List[List[int]]) -> int: plen = len(points) if plen < 2: return 0 #计算任意两点之间曼哈顿距离 cost_list = [] for i in range(plen-1): ...原创 2021-01-19 10:48:09 · 113 阅读 · 0 评论 -
LeetCode——1202.字符串交换
#总体思想是先建图,然后再遍历图去找最大连图分量,然后对每个连通分量排序就可以得到最小值class Solution: def dfs(self,res,graph,visited,x): for neighbor in graph[x]: if not visited[neighbor]: visited[neighbor] = 1 res.append(neighbor) .原创 2021-01-11 13:01:46 · 165 阅读 · 0 评论 -
LeetCode——399.除法求值
class Solution: def calcEquation(self, equations: List[List[str]], values: List[float], queries: List[List[str]]) -> List[float]: graph = defaultdict(set) weight = defaultdict(float) #建图 for i,equ...原创 2021-01-06 11:30:01 · 100 阅读 · 0 评论 -
《Leetcode of October 》695.岛屿的最大面积
class Solution: def helper(self,grid,i,j): if i<0 or j<0 or i>=len(grid) or j>=len(grid[0]) or grid[i][j]==0: return 0 grid[i][j]=0 count=1 tmp = [[1,0],[-1,0],[0,1],[0,-1]] fo...原创 2020-10-30 18:43:05 · 108 阅读 · 0 评论 -
《Leetcode of October 》463.岛屿的周长
class Solution: def islandPerimeter(self, grid: List[List[int]]) -> int: if not grid: return 0 res=0 col,row = len(grid[0]),len(grid) for i in range(row): for j in range(col): ...原创 2020-10-30 18:35:41 · 85 阅读 · 0 评论 -
《Leetcode》841.钥匙和房间(无向图的连通性)
题目链接:841.钥匙和房间class Solution: def canVisitAllRooms(self, rooms: List[List[int]]) -> bool: if not rooms: return True #DFS def dfs(x): vis.add(x) for it in rooms[x]: .原创 2020-08-31 21:07:50 · 184 阅读 · 0 评论 -
查找无向图得连通分量:547.朋友圈
题目链接:朋友圈如果A认识B,B认识C,C认识D,那么就说明A认识C。我把这种方法称为顺藤摸瓜法。如果把这种关系放在图里面,也就是一个图有几条联通分量的题目,所以可以用两个方法来求解:1、DFS 2、BFS;DFS这个方法更好理解一些,每次摸一个瓜就给它标注一次,如果DFS摸瓜结束那就进行重新遍历。可以把给定的二维数组看作是邻接表。class Solution: def findCircleNum(self, M: List[List[int]]) -> int: .原创 2020-08-28 10:32:03 · 156 阅读 · 0 评论 -
图的遍历:133.克隆图
题目:133.客隆图1、题目分析克隆一张图,并且是深度拷贝;深度拷贝就是有新的引用,节点的关系和值都是一样的,只不过是每个节点的引用是不一样的。明天找机会重新复习一下深度和浅度拷贝。2、解题分析初始话一个队列,将node添加到队列中去 初始化一个hash表,key是节点,value是它的相邻节点 进行BFS遍历 如果邻居节点不在hash中,将新的节点添加到hash中 如果邻居节点在hash中,就更新节点的邻居节点 返回new的图结构,也就是图的深度拷贝了3、代码"""原创 2020-08-12 20:23:58 · 93 阅读 · 0 评论 -
染色问题:785. 判断二分图
给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边:graph[i]中不存在i,并且graph[i]中没有重复的值。示例 1:输入: [[1,3], [0,2], [1,3], ..原创 2020-07-16 16:08:07 · 207 阅读 · 0 评论 -
《Leetcode》127. 单词接龙
给定两个单词(beginWord和 endWord)和一个字典,找到从beginWord 到endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例1:输入:beginWord = "hit",endWor...原创 2020-06-07 15:04:58 · 146 阅读 · 0 评论 -
《Leetcode》210、课程表II
现在你总共有 n 门课需要选,记为0到n-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例1输入: 2, [[1,0]] 输出: [0,1]解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0...原创 2020-05-17 22:49:34 · 462 阅读 · 0 评论