Leetcode684. 冗余连接

news2024/11/26 15:40:35

Every day a Leetcode

题目来源:684. 冗余连接

解法1:并查集

因为需要判断是否两个节点被重复连通,所以我们可以使用并查集来解决此类问题。

代码:

/*
 * @lc app=leetcode.cn id=684 lang=cpp
 *
 * [684] 冗余连接
 */

// @lc code=start
class UnionFind
{
    vector<int> father, size;

public:
    UnionFind(int n) : father(n), size(n, 1)
    {
        // iota函数可以把数组初始化为 0 到 n-1
        iota(father.begin(), father.end(), 0);
    }
    int find(int x)
    {
        while (x != father[x])
        {
            // 路径压缩,使得下次查找更快
            father[x] = father[father[x]];
            x = father[x];
        }
        return x;
    }
    void connect(int p, int q)
    {
        int i = find(p), j = find(q);
        if (i != j)
        {
            // 按秩合并:每次合并都把深度较小的集合合并在深度较大的集合下面
            if (size[i] < size[j])
            {
                father[i] = j;
                size[j] += size[i];
            }
            else
            {
                father[j] = i;
                size[i] += size[j];
            }
        }
    }
    bool isConnected(int p, int q)
    {
        return find(p) == find(q);
    }
};
class Solution
{
public:
    vector<int> findRedundantConnection(vector<vector<int>> &edges)
    {
        int n = edges.size();
        UnionFind uf(n + 1);
        // uf.init();
        for (auto &edge : edges)
        {
            int u = edge[0], v = edge[1];
            if (uf.isConnected(u, v))
                return edge;
            uf.connect(u, v);
        }
        return {};
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(nlog⁡n),其中 n 是图中的节点个数。需要遍历图中的 n 条边,对于每条边,需要对两个节点查找祖先,如果两个节点的祖先不同则需要进行合并,需要进行 2 次查找和最多 1 次合并。一共需要进行 2n 次查找和最多 n 次合并,因此总时间复杂度是 O(2nlog⁡n)=O(nlog⁡n)。这里的并查集使用了路径压缩,但是没有使用按秩合并,最坏情况下的时间复杂度是 O(nlog⁡n),平均情况下的时间复杂度依然是 O(nα(n)),其中 α 为阿克曼函数的反函数,α(n) 可以认为是一个很小的常数。

空间复杂度:O(n),其中 n 是图中的节点个数。

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

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

相关文章

PID温度控制器,全球市场总体规模,前17大厂商排名及市场份额

PID温度控制器全球市场总体规模 PID温度控制器是一种常用的温度控制设备&#xff0c;能够通过使用比例、积分和微分控制算法来实现精确的温度调节。它可以监测和调整温度&#xff0c;保持设定的温度稳定。PID代表比例、积分和微分&#xff0c;比例&#xff08;P&#xff09;控…

【Verilog教程】6.7 Verilog流水线

关键词&#xff1a;流水线&#xff0c;乘法器 硬件描述语言的一个突出优点就是指令执行的并行性。多条语句能够在相同时钟周期内并行处理多个信号数据。 但是当数据串行输入时&#xff0c;指令执行的并行性并不能体现出其优势。而且很多时候有些计算并不能在一个或两个时钟周期…

linux权限机制,

目录 用户与组,id,passwd 查看登录用户whomi,who,w 创建用户 useradd 修改用户信息usermod 删除指定用户userdel 组 ​编辑创建修改删除组groupadd groupmod groupdel 权限 ls-l 修改文件所属用户&#xff0c;所属组 chown,chgrp(change group) 修改权限 chmod 默认权…

针对http接口进行测试,使用Jmeter工具实现

前言&#xff1a; 本文主要针对http接口进行测试&#xff0c;使用Jmeter工具实现。 Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;本次直接使用Jmeter工具来完成对Http接口的测试。 一、开发接口…

26381-2011 合成纤维丝织坯绸 阅读笔记

声明 本文是学习GB-T 26381-2011 合成纤维丝织坯绸. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了合成纤维丝织坯绸的术语和定义、要求、试验方法、检验规则、包装和标志。 本标准适用于评定各类合成纤维丝织坯绸品质。 2 规…

需求堆积,如何排序产品优先极

面对堆积的产品需求&#xff0c;到底该如何排序优先极呢&#xff1f; 需求排期的目标 在谈具体的排期方法之前&#xff0c;有必要先探讨一下——合理的需求排期应该达到什么的目标呢&#xff1f;如果站在与项目相关的利益人员的角度来看&#xff0c;至少应该使以下四方面的收…

消化酶在婴幼儿中的重要作用

婴幼儿的健康和发育是每个家庭都格外关心的事情。良好的营养对于婴幼儿的生长和发育至关重要。然而&#xff0c;在婴幼儿的早期生活阶段&#xff0c;由于其胃肠道系统尚未充分发育&#xff0c;他们对于食物的消化和吸收能力有限。在这个过程中&#xff0c;消化酶扮演了至关重要…

C# Task任务详解

文章目录 前言Task返回值无参返回有参返回 async和await返回值await搭配使用Main async改造 Task进阶Task线程取消测试用例超时设置 线程暂停和继续测试用例 多任务等最快多任务全等待 结论 前言 Task是对于Thread的封装&#xff0c;是极其优化的设计&#xff0c;更加方便了我…

张量-数值操作函数

tf.ones(shape,dtype)该函数可以按指定类型与形状生成值为1的张量。 示例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior()temp tf.ones([2,3],tf.int32)with tf.Session() as sess:print(sess.run(temp)) tf.ones_like(input)该函数可生成和输入张量…

基于SpringBoot+Bootstrap的旅游管理系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 登录模块的实现 景点信息管理界面 订票信息管理界面 用户评价管理界面 用户管理界面 景点资讯界面 系统主界面 用户注册界面 景点信息详情界面 订票信息界面 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言…

OS 模拟进程状态转换

下面的这个博主写的很好 但是他给的代码print部分和语言风格python三识别不了 这个特别感谢辰同学帮我调好了代码 我放在主页上了 估计过两天就可以通过了 《操作系统导论》实验一&#xff1a;模拟进程状态转换_process-run.py-CSDN博客 这个补充一下他没有的&#xff1a;OS…

深入props --React进阶指南笔记

一次render的过程&#xff1a; 调用React.createElement形成新的element过程&#xff0c;新的element上就会有新的props属性&#xff08;即重新渲染视图的关键&#xff09;。 来看一个demo&#xff1a; /* children 组件 */ function ChidrenComponent(){return <div> I…

自研多模态追踪算法 PICO 为「手柄小型化」找到新思路

作者&#xff1a;张韬、林泽一 、闻超 、赵洋 研发背景 作为头戴的追踪配件&#xff0c;VR手柄可以通过HMD&#xff08;头戴显示设备&#xff09;的inside-out光学追踪定位原理&#xff0c;计算出手柄的空间运动轨迹&#xff0c;同时结合6轴传感器实现6DoF空间定位。与此同时&a…

Stm32_标准库_1_GPIOA初始化

代码&#xff1a; #include "stm32f10x.h" // Device headerGPIO_InitTypeDef GPIO_InitStructur;//定义变量结构体int main(void){/*使用RCC开启GPIO的时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启PA端口时钟/*使用GPIO_I…

JavaScript数组分组

数组分组: 含义: 数据按照某个特性归类 1. reducefn(cur, index)作为对象的key,值为按照fn筛选出来的数据 // 利用reduce分组 function group(arr, fn) {// 不是数组if (!Array.isArray(arr)) {return arr}// 不是函数if (typeof fn ! function) {throw new TypeError(fn…

全网最牛,Jmeter接口自动化测试从0到1实施步骤(详细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、工具下载 JDK…

聚焦云原生安全|如何为5G边缘云和工业互联网应用筑牢安全防线

9月22日&#xff0c;2023年中国信息通信业发展高层论坛5G工业互联网分论坛在北京顺利举办。 作为国内云原生安全领导厂商&#xff0c;安全狗受邀出席此次活动。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;成立于2013年&#xff0c;致力于提供云…

JavaScript Web APIs第一天笔记

复习&#xff1a; splice() 方法用于添加或删除数组中的元素。 **注意&#xff1a;**这种方法会改变原始数组。 删除数组&#xff1a; splice(起始位置&#xff0c; 删除的个数) 比如&#xff1a;1 let arr [red, green, blue] arr.splice(1,1) // 删除green元素 consol…

26527-2011 有机硅消泡剂 阅读笔记

声明 本文是学习GB-T 26527-2011 有机硅消泡剂. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了有机硅消泡剂的分类、要求、试验方法、检验规则、标志、包装、运输和贮存。 本标准适用于以聚甲基硅氧烷为活性主体制成的有机硅消…

《数字图像处理-OpenCV/Python》连载(9)多帧图像的读取与保存

《数字图像处理-OpenCV/Python》连载&#xff08;9&#xff09;多帧图像的读取与保存 本书京东优惠购书链接&#xff1a;https://item.jd.com/14098452.html 本书CSDN独家连载专栏&#xff1a;https://blog.csdn.net/youcans/category_12418787.html 第1章 图像的基本操作 为…