Leetcode 684. 冗余连接

在这里插入图片描述

心路历程:

这道题属于图论的经典连通问题,这道题翻译过来就是,找到破开图中环的一条边;再翻译过来就是,从后往前遍历edges,依次连接边,当发现新连接的边已经有相同父节点时(已经马上成环了),那么就把这个新的边返回,这就是一个多余的边。
方法就是并查集。

并查集的核心其实在于father数组初始化成range(n)以及单向递归的find函数。核心理论就是无论什么时候总会有一个father中的元素满足father[x] = x,从而结束递归的查找。

注意的点:

1、rank可以用可以不用,只是压缩路径用的,用的话注意初始化都为1
2、注意需要从后往前遍历

解法一:并查集+不压缩路径

class Solution:def findRedundantConnection(self, edges: List[List[int]]) -> List[int]:# 就是把环给破开就行# 并查集:如何根据边的关系建立图?->建立指向同一个father的集合即可n = len(edges)uf = UF(n)for x, y in edges:if uf.union(x, y) == 0: return [x,y]class UF:def __init__(self, n):self.father = [i for i in range(n+1)] # 因为图中结点是1开头的,所以第0位置让出去了def find(self, x):if x == self.father[x]: return x  # 找到了父节点,父节点是一直没有变过的初始化就有的结点return self.find(self.father[x])def union(self, x, y):fx, fy = self.find(x), self.find(y)if fx == fy: return 0 # 证明不需要连接self.father[fy] = fxreturn 1

解法二:并查集+压缩路径

class Solution:def findRedundantConnection(self, edges: List[List[int]]) -> List[int]:n = len(edges)uf = UF(n)for x, y in edges:if uf.union(x, y) == 0: return [x,y]class UF:def __init__(self, n):self.father = [i for i in range(n+1)] # 因为图中结点是1开头的,所以第0位置让出去了self.rank = [1]*(n+1)  # 表示从父结点到最远子结点的距离def find(self, x):if x == self.father[x]: return x  # 找到了父节点,父节点是一直没有变过的初始化就有的结点return self.find(self.father[x])def union(self, x, y):fx, fy = self.find(x), self.find(y)if fx == fy: return 0 # 证明不需要连接# 下面这段是用于压缩路径的;树的秩大的当爹,一样大的时候就指定一个,然后将其秩+1rfx, rfy = self.rank[fx], self.rank[fy]if rfx > rfy: self.father[fy] = fxelif rfx < rfy: self.father[fx] = fyelse:self.father[fy] = fxself.rank[fx] += 1return 1  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机风力发电机迎风面对风向的追踪系统设计

**单片机设计介绍&#xff0c;基于单片机风力发电机迎风面对风向的追踪系统设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机风力发电机迎风面对风向的追踪系统设计是一个涉及单片机编程、传感器技术、机械控制等多个领域的综…

java日志框架简介

文章目录 概要常用日志框架常见框架有以下&#xff1a;slf4j StaticLoggerBinder绑定过程&#xff08;slf4j-api-1.7.32 &#xff09;JCL 运行时动态查找过程&#xff1a;&#xff08;commons-logging-1.2&#xff09;使用桥接修改具体日志实现 一行日志的打印过程开源框架日志…

面试算法-153-旋转图像

题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,…

Java项目:基于Springboot+vue实现的医院住院管理系统设计与实现(源码+数据库+开题报告+任务书+毕业论文)

一、项目简介 本项目是一套基于Springbootvue实现的医院住院管理系统设 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简…

JS之函数

JS中的函数 JavaScript 中的函数是被设计为执行特定任务的代码块&#xff0c;可以通过 function 关键字进行定义。函数的语法如下&#xff1a; function functionName(parameter1, parameter2, ...) {// 要执行的代码块return returnValue; // 可选&#xff0c;用于返回值 } …

基于Springboot+Vue实现前后端分离社团管理系统

一、&#x1f680;选题背景介绍 &#x1f4da;推荐理由&#xff1a; 21世纪时信息化的时代&#xff0c;几乎任何一个行业都离不开计算机&#xff0c;将计算机运用于社团管理也是十分常见的。过去使用手工的管理方式对大学生社团进行管理&#xff0c;造成了管理繁琐、难以维护等…

基于java+SpringBoot+Vue的房屋租赁系统设计与实现

基于javaSpringBootVue的房屋租赁系统设计与实现 开发语言: Java 数据库: MySQL技术: Spring Boot JSP工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 房源浏览模块&#xff1a;展示可租赁的房源信息&#xff0c;用户可以根据条件筛选房源。 预约看房模块&#…

java项目基于Springboot和Vue的高校心理教育辅导系统的设计与实现

今天要和大家聊的是基于Springboot和Vue的高校心理教育辅导系统的设计与实现 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&…

springboot实战---5.最简单最高效的后台管理系统开发

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;SpringBoot &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&…

安达发|APS软件在皮具箱包生产工艺中的应用

APS软件&#xff0c;即高级生产计划排程系统&#xff08;Advanced Planning and Scheduling&#xff09;&#xff0c;在皮具箱包生产工艺中的应用至关重要。它通过高效的生产计划和资源优化&#xff0c;帮助企业降低成本、提高生产效率和市场响应速度。以下是APS软件在皮具箱包…

day03-Docker

1.初识 Docker 1.1.什么是 Docker 1.1.1.应用部署的环境问题 大型项目组件较多&#xff0c;运行环境也较为复杂&#xff0c;部署时会碰到一些问题&#xff1a; 依赖关系复杂&#xff0c;容易出现兼容性问题开发、测试、生产环境有差异 例如一个项目中&#xff0c;部署时需要依…

MybatisPlus分页插件的使用和原理

使用 分页是后端开发的一个基础问题 基本上所有新手都会遇到&#xff0c;从前比较原始的分页 可能需要我们自己写分页 比如拿到分页参数 页数和num&#xff0c;然后自己把它拼接到sql里面去。 MybatisPlus提供了一个分页插件可以很方便的使用 对业务人员比较友好 先给一个简…

代码随想录学习Day 24

93.复原IP地址 题目链接 讲解链接 本题属于切割问题&#xff0c;切割问题需要使用回溯算法来将所有的结果搜索出来&#xff0c;与前一题分割回文串是类似的。本题的树形结构如下图所示&#xff1a; 回溯三部曲&#xff1a; 1.递归函数参数及返回值&#xff1a;参数为待分割…

在 MySQL 某数据表中针对 username 字段建立唯一索引后,基于万级数据量和百万级数据量分别进行查询某用户 A,请问两次查询的性能耗时对比如何?

在 MySQL 数据库中&#xff0c;对 username 字段加了唯一索引后&#xff0c;无论数据量从 1 万增长到 100 万&#xff0c;只要查询条件始终是通过 username 精确查找用户 A&#xff0c;理论上两次查询的耗时应该保持在一个相对稳定的范围内&#xff0c;即查询性能大致保持一致。…

了解监控易(14):中间件监控

在当今的IT运维领域&#xff0c;中间件作为连接应用与底层系统的桥梁&#xff0c;其稳定性和性能至关重要。为了实现高效的一体化运维&#xff0c;各种监控工具应运而生&#xff0c;其中“监控易”以其强大的功能和灵活的适应性&#xff0c;受到了广泛关注。 监控易的核心功能之…

2012年认证杯SPSSPRO杯数学建模D题(第一阶段)人机游戏中的数学模型全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 D题 人机游戏中的数学模型 原题再现&#xff1a; 计算机游戏在社会和生活中享有特殊地位。游戏设计者主要考虑易学性、趣味性和界面友好性。趣味性是本质吸引力&#xff0c;使玩游戏者百玩不厌。网络游戏一般考虑如何搭建安全可靠、丰富多彩的…

JVM高级篇之GC

文章目录 版权声明垃圾回收器的技术演进ShenandoahShenandoah GC体验Shenandoah GC循环过程 ZGCZGC简介ZGC的版本更迭ZGC体验&使用ZGC的参数设置ZGC的调优 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明&#xff0c;所有版权属于黑马…

MySQL-相关约束

MySQL-约束 前提&#xff1a; 防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息。为了保证数据的完整性&#xff0c;SQL规范以约束的方式对表数据进行额外的条件限制。有以下考虑要点&#xff1a; ①实体完整性&#xff08;Entity In…

【C++】拆分详解 - 内存管理

文章目录 前言一、C/C内存分布二、C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free三、C内存管理方式  3.1 new/delete操作内置类型  3.2 new和delete操作自定义类型  3.3 operator new与operator delete函数 四、new和delete的实现原理  4.1 内置类型…

C++中,`::`

在C中&#xff0c;:: 是作用域解析运算符&#xff08;Scope Resolution Operator&#xff09;。它有以下几种主要的作用&#xff1a; 访问命名空间中的成员&#xff1a;可以使用 :: 来访问命名空间中的变量、函数、类等成员。例如&#xff1a; namespace A {int x 5; }int mai…