LeetCode[684]冗余连接

news2025/1/16 13:45:17

难度:中等

题目:

树可以看成是一个连通且 无环 无向 图。
给定往一棵 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 中无重复元素

  • 给定的图是连通的


Related Topics

  • 深度优先搜索

  • 广度优先搜索

  • 并查集


重点!!!解题思路

第一步:

明确解题手段
这种类似于连通性问题均可使用并查集来解决

第二步:

遍历数组,使用并查集连接节点,
连接之前判断一下之前是否连接过,如果连接过那么直接返回此次判断的数据

源码:

class UnionFind {
    //记录每个节点的根节点
    int[] parent;
    //记录每个子集的节点数
    int[] rank;
    //记录并查集中的联通分量数量
    int count;

    public UnionFind(int n){
        count=n;
        parent=new int[n];
        for (int i=0;i<n;i++){
            parent[i]=i;
        }
        rank=new int[n];
        Arrays.fill(rank,1);
    }

    //路径压缩
    public int find(int ind){
        if (parent[ind]!=ind){
            parent[ind]=find(parent[ind]);
        }
        return parent[ind];
    }

    //按秩合并
    public void unite(int ind1,int ind2){
        int root1=find(ind1),root2=find(ind2);
        if (root1!=root2){
            if (rank[root1]<rank[root2]){
                int temp=root2;
                root2=root1;
                root1=temp;
            }
            parent[root2]=root1;
            rank[root1]+=rank[root2];
            count--;
        }
    }

    public int getCount(){
        return count;
    }
    public boolean connected(int ind1,int ind2){
        return find(ind1)==find(ind2);
    }
}
class Solution {
    public int[] findRedundantConnection(int[][] edges) {
        UnionFind uf= new UnionFind(edges.length+1);
        for (int[] edge : edges) {
            int idx1=edge[0];
            int idx2=edge[1];
            if (!uf.connected(idx1,idx2)){
                uf.unite(idx1,idx2);
            }else {
                return edge;
            }
        }
        return edges[0];//因为根本判断不到这一步,所以这里写什么都可以
    }
}

解题结果:

如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。

系列持续更新中,点个订阅吧

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

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

相关文章

Python 压缩 css 文件,第三方模块推荐

本篇博客为大家详细介绍一下如何在 Python 中压缩 CSS 文件。 正式开始前&#xff0c;需要准备一个未压缩过的 CSS 文件。 Python 压缩 csscsscompressor 库使用在 Flask 中压缩 css 文件cssmin 库的用法rcssmin 库的用法总结csscompressor 库使用 在 Python 中可以使用多种方…

CSS之浮动以及清除浮动的几种方式

一. 什么是 CSS Float&#xff08;浮动&#xff09; CSS 的 Float&#xff08;浮动&#xff09;&#xff0c;会使元素向左或向右移动&#xff0c;其周围的元素也会重新排列。 Float&#xff08;浮动&#xff09;&#xff0c;往往是用于图像&#xff0c;但它在布局时一样非常有…

【大数据管理】Java实现字典树TireTree

实现字典树&#xff0c;支持插入和删除&#xff0c;能够打印每一层的数据示例数据“SJ”, “SHJ”, “SGYY”,"HGL" ,将这些数据插入前缀树&#xff0c;打印树&#xff0c;修改SHZ为SHHZ 解题思路 Trie树即字典树&#xff0c;又称单词查找树或键树&#xff0c;是一…

Linux下进程控制详解

目录 一、进程创建 1.1 初识fork 1.2 函数返回值 1.3 写时拷贝技术 1.4 fork函数的使用场景 1.5 fork函数的失败原因 二、进程终止 2.1 进程退出场景 2.2 进程退出码 2.3 进程正常退出方法 2.3.1 exit函数 2.3.2 _exit函数 2.3.3 return方法 2.3.4 方法分析对比 …

【LINUX修行之路】——工具篇gcc/g++的使用和自动化构建工具make/makefile

学习范围&#xff1a;✔️LINUX ✔️ gcc/g✔️make/makefile作者 &#xff1a;蓝色学者 文章目录一、前言二、概念什么是gcc/g&#xff1f;什么是make/makefile&#xff1f;三、教程3.1gcc/g命令3.2make/makefile依赖关系依赖方法编写makefile文件四、资源一、前言 欢迎大家来…

谷粒学院——Day20【项目总结】

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

计算机组成原理实验-logisim实现自动售糖机

一.作业内容; 二.设计分析&#xff1a; 首先我们先确定输入和输出&#xff0c;根据题目的提示很明显可以看出因为每次可以投入10元或者5元硬币&#xff0c;当总钱数达到15元或者超过15元的时候&#xff0c;自动出糖&#xff0c;并且机器不找零&#xff0c;所以可以看出最大的钱…

基于 V2G 技术的电动汽车实时调度策略(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

第九层(2):STL之string类

文章目录前情回顾string类string类的本质string与char*的区别string类的特点string类的构造函数string类内的字符串追加函数string类内的字符串查找函数string类内的字符串替换函数string类内的字符串比较函数string类内的字符单个访问函数string类内的插入函数string类内的删除…

最小化最大值+拓扑排序要点+概率

今天嫖来的两道题&#xff1a; D.ScoreofaTreeD. Score of a TreeD.ScoreofaTree E.EdgeReverseE. Edge ReverseE.EdgeReverse DDD题是比较离谱的一道题&#xff0c;你在做的时候好像是dp&#xff0c;但是选择的情况太多了&#xff0c;其实对于每一个节点来说&#xff0c;除了叶…

fpga实操训练(fpga和cpu之间的配合)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 cpu和fpga之间,各有各的优势,cpu开发比较快捷,程序员比较好找;fpga对于基础运算效率高,但是找人不好找。实际产品的开发中,一般cpu负责需要接口定义和个性化定制的地方,而fp…

【Datewhale一起吃瓜 Task3】啃瓜第四章

文章目录决策树学习过程预测过程如何划分信息熵信息增益增益率基尼指数泛化能力关键&#xff1a;剪枝预剪枝后剪枝比较缺失值处理&#xff1a;样本赋权&#xff0c;权重划分决策树 决策树基于“树”结构进行决策 每个内部节点对应于某个属性上的测试每个分支对应于该属性的某个…

OpenGL ES着色器语言(GLSL ES)规范 ——下篇

文章目录前言分支和循环if、if-elseforcontinue、break、discard着色器内置变量函数函数定义规范声明webgl内置函数存储限定字constattributeuniformvarying精度限定字预处理指令总结前言 本篇接上文继续对着色器语言规范进行讲解&#xff0c;本文的内容包括&#xff1a;分支和…

Windows下JetBrains GoLand环境配置记录

闲来无事&#xff0c;go go go 这篇文章不是最简单的配置方法&#xff0c;相对简单的配置方法见文末引用。 本文记录了我遇见的一些问题以及解决方案与解释。 Go编译环境配置 首先得前往谷歌的网站下载go语言的镜像文件&#xff1a; Downloads - The Go Programming Languag…

1. 数据仓库维度建模简介

数据仓库的设计目的软件产品来源于用户的需求&#xff0c;因此&#xff0c;在深入数据仓库的设计之前&#xff0c;我们需要了解客户的痛点有哪些&#xff0c;整理如下&#xff1a;我们收集了海量的数据&#xff0c;但无法对其访问&#xff1b;我们需要以各种方式方便的对数据进…

C C++实现两矩阵相乘--模拟法

目录前言数学中两矩阵怎么相乘?C/C语言实现运行结果前言 11月左右大三找日常实习的时候&#xff0c;面试乱杀&#xff0c;但是笔试碰到了这个矩阵相乘的编程题有几次&#xff0c;可能脑瓜子晕&#xff0c;突然被绕来绕去写不出来&#xff0c;很无语&#xff0c;现在总结一下;…

CS61A 2022 fall lab01

CS61A 2022 fall lab01 文章目录CS61A 2022 fall lab01TopicsDivision, Floor Div, and ModuloFunctionsCall expressionsreturn and printControlBoolean operatorsShorting Circuiting(短路效应)If StatementsWhile LoopsError MessagesRequired QuestionsWhat Would Python …

AI算法(三)plt基础

目录 一、前言 二、各类图 2.1、折线图 2.2、散点图 2.3、点线图 2.4、下三角线 2.5、点虚线 2.6、虚点线 2.7、绘制自己的学习曲线 三、多线 四、画布 五、直方图 一、前言 plt是深度学习的常用库之一&#xff0c;很多指标结果如AUC、F1、ROC等都是通过plt来实现。本篇文章主…

【每日数据结构与算法】

这里面有 10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树; 10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算 法、动态规划、字符串匹配算法。 文章目录一、 基本算法思想1-1 回溯1-2 动态规划dp1-3二、 排序2-1 O(n…

【015 关键字】typedef和define的区别

一、两者区别 关键字typedefdefine&#xff08;宏&#xff09;作用不同定义&#xff08;标识符或关键字&#xff09;别名简单字符串替换执行时间不同编译过程一部分预处理过程完成作用域不同从定义到花括号“}”截至从定义到文件结尾截止 对指针操作不同 typedef int* INTPTR…