Leetcode 684. 冗余连接

在这里插入图片描述

心路历程:

最开始的想法是把环给破开就行,思路:建图,遍历找环,然后找到edges里属于环的一个边;每次不选择上一步走过的边,DFS,需要回溯。后来查阅资料发现这道题适合用一个叫并查集的数据结构。之前自己做美团的笔试题的时候,就遇到了类似朋友圈的问题但是没做出来。
并查集的核心是将同一’圈子‘的结点都连接到一个’老大‘身上,可以一直串联,也可以为了降低下次查询的复杂度而利用图的秩将其合并。

注意的点

1、这道题可以顺序建立并查集,当建立到第一个闭环集合时,证明此时成环,从题目要求中发现只多一个边,那么这个最后增加的边就是最后多余的边。
2、rank秩的作用是降低find复杂度,并不是必须的。
3、本题的技巧在于可以通过判断成环的最后一笔来找出冗余的边,判断成环的一个方法就是并查集在union操作时两个father是一个(不需要连接)。

解法一:并查集

class Solution:
    def findRedundantConnection(self, edges: List[List[int]]) -> List[int]:
        # 就是把环给破开就行
        # 思路:建图,遍历找环,然后找到edges里属于环的一个边;每次不选择上一步走过的边,DFS,需要回溯
        # 并查集:如何根据边的关系建立图?->建立指向同一个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 # 证明不需要连接
        # 默认前面的是father
        self.father[fy] = fx
        return 1

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

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位置让出去了
        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 # 证明不需要连接
        # 下面这段是用于压缩路径的;树的秩大的当爹,一样大的时候就指定一个,然后将其秩+1
        rfx, rfy = self.rank[fx], self.rank[fy]
        if rfx > rfy: self.father[fy] = fx
        elif rfx < rfy: self.father[fx] = fy
        else:
            self.father[fy] = fx
            self.rank[fx] += 1
        return 1

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

那些场景需要额外注意线程安全问题

主要学习那些场景需要额外注意线程安全问题&#xff0c;在这里总结了四中场景。 访问共享变量或资源 第一种场景是访问共享变量或共享资源的时候&#xff0c;典型的场景有访问共享对象的属性&#xff0c;访问static静态变量&#xff0c;访问共享的缓存&#xff0c;等等。因为…

旅游小程序的市场与发展趋势

随着科技的发展&#xff0c;移动互联网已经成为我们生活中不可或缺的一部分。在这个时代&#xff0c;小程序已经成为了一种新的趋势&#xff0c;尤其是在旅游行业。那么&#xff0c;旅游小程序有哪些市场&#xff0c;发展趋势又怎么样呢&#xff1f; 一、旅游小程序的市场 1. 用…

WebGIS航线编辑器(无人机航线规划)

无人机航点、航线规划&#xff0c;实现全自动航点飞行作业及飞行航拍。禁飞区、作业区功能保障飞行安全。 GIS引擎加载 const viewer new Cesium.Viewer("cesiumContainer", { imageryProvider: new Cesium.IonImageryProvider({ assetId: 3872 }), }); const im…

基于微信小程序的CMS内容管理系统开发笔记

背景调研 内容管理CMS小程序的帮助运营者创建和管理小程序内容&#xff0c;提供一个直观的操作界面&#xff0c;能够轻松地添加、编辑和发布内容&#xff0c;而无需了解复杂的编程知识。可以进行栏目管理&#xff0c;文章管理&#xff0c;编辑文章内容&#xff0c;包括文字、图…

使用CUDA 为Tegra构建OpenCV

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;MultiArch与Ubuntu/Debian 的交叉编译 下一篇&#xff1a;在iOS中安装 警告&#xff1a; 本教程可能包含过时的信息。 使用CUDA for Tegra 的OpenCV 本文档是构建支持 CUD…

解读“CFMS中国闪存市场峰会”存储技术看点-2

根据Yole机构分析数据显示&#xff0c;CXL在2024年开始爬坡&#xff0c;在2025年将会大规模上量&#xff0c;也就是代表着CXL的时代从2025年开始正式到来。 服务器目前正面临着内存性能挑战&#xff0c;而CXL部署提供了短期和长期的解决方案。从CXL 1.1开始&#xff0c;AI云服务…

基于python+vue中医学习服务管理系统flask-django-php-nodejs

随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的中医学习服务管理系统。当前的信息管理存在工作…

Mysql 怎么产生隐藏主键 和 还要不要学MySQL

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;…

【Django开发】前后端分离美多商城项目第3篇:用户部分,1. 后端接口设计:【附代码文档】

美多商城项目4.0文档完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;美多商城&#xff0c;项目准备1.B2B--企业对企业,2.C2C--个人对个人,3.B2C--企业对个人,4.C2B--个人对企业。项目准备&#xff0c;配置1. 修改settings/dev.py 文件中的路径信息,2. INS…

Amazon SageMaker + Stable Diffusion 搭建文本生成图像模型

如果我们的计算机视觉系统要真正理解视觉世界&#xff0c;它们不仅必须能够识别图像&#xff0c;而且必须能够生成图像。文本到图像的 AI 模型仅根据简单的文字输入就可以生成图像。 近两年&#xff0c;以ChatGPT为代表的AIGC技术崭露头角&#xff0c;逐渐从学术研究的象牙塔迈…

面试笔记——MySQL(优化篇:定位慢查询、SQL执行计划、索引、SQL优化)

定位慢查询 在MySQL应用中&#xff0c;慢查询 通常指的是执行时间超过一定阈值的查询语句。这个阈值通常由管理员或开发人员根据具体情况设置&#xff0c;一般是以毫秒为单位。慢查询可能会影响系统性能和用户体验&#xff0c;因此需要及时识别和优化。 表象&#xff1a; 页面…

探秘开源隐语:架构深度剖析与隐私计算技术之旅

1.隐语架构 隐语&#xff08;SecretFlow&#xff09;作为蚂蚁集团开源的可信隐私计算框架&#xff0c;其架构设计具有多层次的特点&#xff0c;虽然具体分层名称可能会根据实际描述略有差异&#xff0c;但我们可以依据已有的技术和信息对其进行结构化的拆解&#xff1a; 硬件层…

第一单元日考技能

文章目录 第一单元1.请用c程序随机输入20个数&#xff08;每小题10分&#xff09;2.①按要求输出*形状3.计算题  s1*12*23*3...100*100 &#xff08;每问10分&#xff09;4.1. 使用 C 创建一个简单的计算器&#xff0c;可以实现 , -, *, / 。 if switch5.图形打印 第一单元 1…

Lua | 一篇文章讲清Lua语法及热更新

目录 一、环境搭建 二、Lua语法 1.输出print、单行注释、多行注释 2.变量 &#xff08;1&#xff09;nil &#xff08;2&#xff09;number &#xff08;3&#xff09;string &#xff08;3.1&#xff09;字符串长度 &#xff08;3.2&#xff09;字符串拼接 &#xf…

LeetCode每日一题——数组串联

数组串联OJ链接&#xff1a;1929. 数组串联 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 题目说 ans 由两个 nums 数组 串联 形成。那么我们就只需要历遍两次nums数组&#xff0c;将它放在我们的ans数组里。 注意&#xff1a; 题目函数对于我…

Day22:过滤敏感词、开发发布帖子、帖子详情

过滤敏感词 前缀树 - 名称:Trie、字典树、查找树 - 特点:查找效率高&#xff0c;消耗内存大 - 应用:字符串检索、词频统计、字符串排序等在这里插入图片描述 敏感词过滤器的步骤 根节点不包含任何字符&#xff1b;其余每个节点只有一个字符&#xff1b;连接起来一条路就是字…

StarRocks 助力金融营销数字化进化之路

作者&#xff1a;平安银行 数据资产中心数据及 AI 平台团队负责人 廖晓格 平安银行五位一体&#xff0c;做零售金融的领先银行&#xff0c;五位一体是由开放银行、AI 银行、远程银行、线下银行、综合化银行协同构建的数据化、智能化的零售客户经营模式&#xff0c;这套模式以数…

python 爬虫爬取地理空间高程图GDEMV2 30m 中国地形

一.配置Python 爬虫 环境 from selenium import webdriver import time # from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys # from selenium.webdriver.comm…

算法体系-14 第十四 贪心算法(上)

一 、 递归套路解决判断完全二叉树 1.1 描述 1.2 分析 1.3 代码 public static boolean isCBT2(Node head) {return process(head).isCBT;}public static class Info {public boolean isFull;public boolean isCBT;public int height;public Info(boolean full, boolean cbt…

学习人工智能:Attention Is All You Need-1-介绍;Transformer模型架构

Transformer模型是目前最成功的chatGPT&#xff0c;Sora&#xff0c;文心一言&#xff0c;LLama&#xff0c;Grok的基础模型。 《Attention Is All You Need》是一篇由Google DeepMind团队在2017年发表的论文&#xff0c;该论文提出了一种新的神经网络模型&#xff0c;即Trans…