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

leetcode 684. 冗余连接

树可以看成是一个连通且 无环 的 无向 图。

给定往一棵 n 个节点 (节点值 1~n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间,且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组 edges ,edges[i] = [ai, bi] 表示图中在 ai 和 bi 之间存在一条边。

请找出一条可以删去的边,删除后可使得剩余部分是一个有着 n 个节点的树。如果有多个答案,则返回数组 edges 中最后出现的那个。

示例 1:
在这里插入图片描述
输入: edges = [[1,2], [1,3], [2,3]]
输出: [2,3]

示例 2:
在这里插入图片描述
输入: edges = [[1,2], [2,3], [3,4], [1,4], [1,5]]
输出: [1,4]

提示:
n == edges.length
3 <= n <= 1000
edges[i].length == 2
1 <= ai < bi <= edges.length
ai != bi
edges 中无重复元素
给定的图是连通的
题目链接:leetcode 684

思路,可以采用并查集实现,记录每个节点的对用的最终 parent 节点,加入一条边为 (a, b), 则赋值 a 的 parent 节点为 b 的 parent 节点, 如果一条边的 parent 对应节点相同,那么说明这俩节点已经在 图中了。

class Solution:def getParent(self, parent, key):if parent[key] != key:return self.getParent(parent, parent[key])return keydef union(self, parent, key1, key2):parent[self.getParent(parent, key1)] = self.getParent(parent, key2)def findRedundantConnection(self, edges: List[List[int]]) -> List[int]:parent = [i for i in range(len(edges)+1)]for x in edges:node1, node2 = x if self.getParent(parent, node1) == self.getParent(parent, node2):return xelse:self.union(parent, node1, node2)

方法二,直接暴力计算

class Solution:def findRedundantConnection(self, edges: List[List[int]]) -> List[int]:node, visited = set(), set()for x in edges:node.add(x[0])node.add(x[1])  current = set()visited.add(edges[0][0])visited.add(edges[0][1])vis = [0 for i in range(len(edges))]vis[0] = 1res = []for i in range(len(node)):## 每次循环只加一个顶点进去,最后的肯定是答案for j in range(len(edges)):if vis[j] == 0:x = edges[j]if x[0] in visited and x[1] in visited:vis[j] = 1res.append(x)breakelif x[0] in visited:vis[j] = 1visited.add(x[1])breakelif x[1] in visited:vis[j] = 1visited.add(x[0])breakif len(res) > 0:return res[-1]return res

相关文章:

  • 故障诊断 | MATLAB实现GRNN广义回归神经网络故障诊断
  • Redis那些事儿(三)
  • Minio多节点多驱动分布式部署官网文档翻译
  • C#将字符串(string)转换为整数(int)几种常见的方法
  • Leetcode—100.相同的树【简单】
  • Linux--线程-条件控制实现线程的同步
  • 在Google Kubernetes集群创建分布式Jenkins(一)
  • vue中app.use()做了什么
  • CSRF攻击(2), 绕过Referer防御
  • 英语——分享篇——每日200词——201-400
  • 基于单片机的智能饮水机系统
  • Luancher和unityLibrary都有build.gradle有什么不同
  • 合肥中科深谷嵌入式项目实战——人工智能与机械臂(六)
  • Java中的异常处理机制是怎样的?
  • golang实现极简todolist
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【Amaple教程】5. 插件
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • CentOS6 编译安装 redis-3.2.3
  • export和import的用法总结
  • Golang-长连接-状态推送
  • JavaScript设计模式系列一:工厂模式
  • javascript数组去重/查找/插入/删除
  • Java程序员幽默爆笑锦集
  • JS+CSS实现数字滚动
  • Python连接Oracle
  • 初识 webpack
  • 看域名解析域名安全对SEO的影响
  • 老板让我十分钟上手nx-admin
  • 试着探索高并发下的系统架构面貌
  • 我感觉这是史上最牛的防sql注入方法类
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • #QT项目实战(天气预报)
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (06)金属布线——为半导体注入生命的连接
  • (2)(2.10) LTM telemetry
  • (python)数据结构---字典
  • (solr系列:一)使用tomcat部署solr服务
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)fock函数详解
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .Net(C#)自定义WinForm控件之小结篇
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .net实现客户区延伸至至非客户区
  • /dev下添加设备节点的方法步骤(通过device_create)
  • /var/lib/dpkg/lock 锁定问题
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解