当前位置: 首页 > backend >正文

代码随想录算法训练营Day59

并查集理论基础
力扣1971.寻找图中是否存在路径【easy】

一、并查集理论基础

文档链接:代码随想录

1、并查集

作用
  • 将两个元素添加到一个集合中。
  • 判断两个元素在不在同一个集合
路径压缩

在这里插入图片描述

  • 如果这棵多叉树高度很深的话,每次find函数 去寻找根的过程就要递归很多次。
  • 我们的目的只需要知道这些节点在同一个根下就可以,所以对这棵多叉树的构造只需要这样就可以了,如图:

在这里插入图片描述

按秩合并
  • 目标:合并两个集合的根节点。
  • 总是将小树(高度低)合并到大树(高度高)的根下,避免树的高度过高。

2、代码

  • find:压缩路径
def find(self, x):if self.parent[x] != x:self.parent[x] = self.find(self.parent[x])  # 递归找根,并更新父节点return self.parent[x]
  • union:秩合并
  def union(self, x, y):root_x = self.find(x)root_y = self.find(y)if root_x == root_y:return  # 已在同一集合# 按秩合并:小树合并到大树if self.rank[root_x] < self.rank[root_y]:self.parent[root_x] = root_yelse:self.parent[root_y] = root_xif self.rank[root_x] == self.rank[root_y]:self.rank[root_x] += 1  # 树高度+1

二、力扣1971.寻找图中是否存在路径【easy】

题目链接:力扣1971.寻找图中是否存在路径
在这里插入图片描述
视频链接:代码随想录
题解链接:力扣

1、思路

  • 时间复杂度: O ( n + m ) O(n + m) O(n+m)

2、代码

  • 并查集
class Solution:def validPath(self, n: int, edges: List[List[int]], source: int, destination: int) -> bool:def find(x):if p[x] != x:p[x] = find(p[x])return p[x]p = list(range(n))for u, v in edges:p[find(u)] = find(v)return find(source) == find(destination)
  • dfs
class Solution:def validPath(self, n: int, edges: List[List[int]], source: int, destination: int) -> bool:def dfs(i):if i == destination:return Truevis.add(i)for j in g[i]:if j not in vis and dfs(j):return Truereturn Falseg = defaultdict(list)for a, b in edges:g[a].append(b)g[b].append(a)vis = set()return dfs(source)

http://www.xdnf.cn/news/7596.html

相关文章:

  • 谷歌宣布推出 Android 的新安全功能,以防止诈骗和盗窃
  • HarmonyOS5云服务技术分享--账号关联开发指南
  • 蓝桥杯框架-按键数码管
  • 使用Java实现Navicat密码的加密与解密
  • 渐开线少齿差传动学习笔记
  • 集星獭 | 重塑集成体验:新版编排重构仿真电商订单数据入库
  • 更新2011-2025经济类联考 396-真题+解析 PDF
  • 30天自制操作系统day5(vram和显存)(GDT和IDT)(c语言结构体)(汇编-c)(ai辅助整理)
  • [Web服务器对决] Nginx vs. Apache vs. LiteSpeed:2025年性能、功能与适用场景深度对比
  • 第5天-python饼图绘制
  • 系统集成项目管理工程师学习笔记之启动过程组
  • 防御策略与安全加固
  • 电子科技大学软件工程实践期末
  • OK536N-C测评:开箱体验以及在Linux下如何管理开发板
  • MacBook Air A2179(Intel版)安装macOS Catalina所需时间
  • 谷歌云服务器稳不稳?
  • femap许可与云计算集成
  • 人工智能如何做主题班会PPT?
  • LeetCode 93.复原IP地址 LeetCode 78.子集 LeetCode 90.子集II
  • 【华为OD- B卷 - 书籍叠放 200分(python、java、c、c++、js)】
  • (05)数字化转型之生产制造:从通常的离散制造到柔性化生产的全景指南
  • 使用 OpenCV 实现万花筒效果
  • python实战项目70:如何给一个空的DataFrame添加行
  • Centos上搭建 OpenResty
  • python 提交命令 到远程windows中
  • Conda环境管理:确保Python项目精准复现
  • 十四、面向对象底层逻辑-BeanFactoryPostProcessor接口设计
  • std::vector<>.emplace_back
  • 演示:【WPF-WinCC3D】 3D工业组态监控平台源代码
  • 02 基本介绍及Pod基础排错