news 2026/8/23 22:29:12

代码随想录 684.冗余连接

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录 684.冗余连接

这道题也是并查集基础题目。

1.并查集可以解决的问题:

(1)判断两个节点是否在一个集合。

(2)将两个节点添加到一个集合中。

2.题目要求:对于一个无向图,返回一条可以删去的边,使得结果图是一个有着N个节点的树(即,只有一个根节点)。如果有多个答案,则返回二维数组中最后出现的边。

3.思路:可以从前向后遍历每一条边(因为优先让前面的边连上),边的两个节点如果不在同一个集合,就加入集合(即同一个根节点)。

(1)如下图所示,节点a和节点b不在同一个集合,那么就可以将两个节点连接在一起。

(2)如果边的两个节点已经出现在同一个集合里,则说明这条边的两个节点已经连在一起了,再加入这条边一定就出现环了,如下图所示。

4.注意:题目已说明该图是在树的基础上添加一条边得到,因此只会有一条冗余边,因此可以在遇到同一个根的两个节点后直接返回即可。

附代码:

class Solution { private int[] p; public int[] findRedundantConnection(int[][] edges) { int n = edges.length; p = new int[n]; for(int i = 0;i < n;i++){ p[i] = i; } for(int i = 0;;i++){ //无限循环,会一直执行到找到冗余边并返回,所以该方法一定有返回值(因为树的性质保证了该方法一定有一条冗余边) //若加上i < n条件,则编译器会认为如果循环内所有if(pa == pb)条件都不满足,那么循环会正常结束,此时循环结束后就没有返回值 //编译器在编译时只做静态代码分析,不执行程序逻辑推理 //编译器认为条件判断里的return只是可能返回,若加上i < n,有限循环中还需要在下面加一个return条件 int pa = find(edges[i][0] - 1); //因为节点编号从1开始,所以要 - 1做数组映射 int pb = find(edges[i][1] - 1); if(pa == pb){ return edges[i]; } p[pa] = pb; } } private int find(int x){ if(p[x] != x){ p[x] = find(p[x]); } return p[x]; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 13:46:44

11、UNIX与Linux编程基础:进程、环境与程序控制

UNIX与Linux编程基础:进程、环境与程序控制 1. 信号机制 在UNIX系统中,内核掌控着众多由不同用户创建的进程,其中包含许多维持系统正常运行所必需的“系统”进程。为了实现进程间的通信,内核允许进程之间相互发送“消息”。不过,由于系统中可能同时存在大量进程和消息,…

作者头像 李华
网站建设 2026/8/24 13:07:09

24、Perl编程入门:基础、应用与最佳实践

Perl编程入门:基础、应用与最佳实践 1. 读取密码文件中的用户名 在某些场景下,我们需要从系统的 /etc/passwd 文件中提取所有用户名。该文件以冒号分隔各个字段,第一个字段即为用户名。以下是一个使用 Perl 实现的脚本: open(PASSWORDS, "/etc/passwd"); wh…

作者头像 李华
网站建设 2026/8/24 9:24:54

UG高版本多轴联动开粗分享—东莞振华职校

UG 高版本&#xff08;如 NX1899 及以后&#xff09;新增了更智能的多轴动态开粗功能&#xff0c;能通过侧刃高效切削&#xff0c;还可灵活适配四轴、五轴加工场景&#xff0c;大幅提升复杂工件开粗效率。下面从核心操作流程、关键参数设置、优化技巧和避坑要点四方面展开分享&…

作者头像 李华
网站建设 2026/8/21 23:06:03

10BASE-T1S以太网技术实践:基于Microchip方案实现单对线50节点工业网络

文章目录1. 10BASE-T1S技术概述1.1 技术背景与发展1.2 技术特点与优势1.3 工业应用场景2. 系统架构设计2.1 整体网络架构2.2 硬件选型分析2.3 软件架构设计3. 开发环境搭建3.1 硬件开发环境3.2 软件开发环境3.3 测试工具准备4. 硬件设计与实现4.1 原理图设计4.2 PCB布局要点4.3…

作者头像 李华
网站建设 2026/8/24 14:09:07

5路红外循迹小车

所需模块&#xff1a;1.stm32f103c8t6核心板2.TB6612电机驱动模块1个3.5个红外循迹传感器4.4个电机通过左右电机产生差速来控制方向main.c#include "system.h" #include "stm32f10x.h" #include "SysTick.h" #include "motor.h" #incl…

作者头像 李华
网站建设 2026/8/24 14:09:44

前端面经整理,零基础入门到精通,收藏这篇就够了

目录 1&#xff09;html&#xff0c;http&#xff0c;web基础篇 进程和线程的区别&#xff1f; 如何理解html语义化&#xff1f;用过哪些html标签&#xff1f; h5新特性 canvas相关 cookie,session,localStorage区别&#xff0c;cookie的长度限制 什么是cookie隔离&…

作者头像 李华