news 2026/4/18 5:18:50

代码随想录 并查集理论基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录 并查集理论基础

一、背景

1.并查集可解决的问题:并查集常用来解决连通性问题。也就是说当我们需要判断两个元素是否在同一个集合里的时候,就想到要用并查集

2.并查集的功能:

(1)将两个元素添加到一个集合中。

(2)判断两个元素在不在同一个集合。

二、原理:从代码层面上讲,如何将两个元素添加到同一个集合中?

1.错误想法:

(1)放到同一个数组或者set或者map中,这样就表示两个元素在同一个集合(但是这么多元素分门别类,可不止一个集合,可能是成百上千个集合,这时会定义很多的数组,不好实现)。

(2)定义一个二维数组(但是如果要判断两个元素是否在同一个集合的时候,只能把二维数组都遍历一遍;每当想添加一个元素到某集合的时候,依然需要把二维数组都遍历一遍,才知道要放到哪个集合里,代码实现逻辑非常复杂)。

2.正确思路:

(1)将三个元素A,B,C(分别是数字)放在同一个集合,其实就是将三个元素连通在一起,如何连通?只需要用一个一维数组来表示,即:father[A] = B,father[B] = C,这样就能表述A与B与C连通了(有向连通图)。

代码如下所示:

// 将v,u 这条边加入并查集 void join(int u, int v) { u = find(u); // 寻找u的根 v = find(v); // 寻找v的根 if (u == v) return; // 如果发现根相同,则说明在一个集合,不用两个节点相连直接返回 father[v] = u; }

(2)find函数的寻根过程,就是通过数组下标找到数组元素,然后一层一层地寻根,代码如下所示。

// 并查集里寻根的过程 int find(int u) { if (u == father[u]) return u; // 如果根就是自己,直接返回
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 13:45:37

Jenkins自由风格作业构建和推送dokcer镜像

云原生环境下Dockerfile 职责分工的主流实践—— 核心逻辑是「研发主导编写、运维兜底适配、Dockerfile 随代码版本化管理」,既符合 “谁开发谁负责” 的权责匹配,也保障了镜像构建的标准化和环境兼容性,Dockerfile 本质是「应用运行环境的代码化描述」&…

作者头像 李华
网站建设 2026/4/7 9:55:12

雨燕直播案例分析:如何打造高并发直播平台

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 分析一个高并发直播平台的架构设计,包括:1. 负载均衡策略;2. 视频流分发网络(CDN)配置;3. 弹幕消息队列处理;4. 用户行为…

作者头像 李华
网站建设 2026/4/17 7:51:13

AI如何帮你彻底理解Java volatile关键字

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个Java多线程示例程序,展示volatile关键字的作用。要求包含:1.两个线程,一个写入volatile变量,一个读取该变量 2.对比使用和不…

作者头像 李华
网站建设 2026/4/13 16:53:18

比传统快3倍!Docker离线安装效率优化全攻略

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个高效的Docker离线安装优化工具,实现:1. 并行下载依赖包 2. 安装步骤自动化编排 3. 进度实时监控 4. 智能缓存管理 5. 安装耗时分析。要求提供对比测…

作者头像 李华
网站建设 2026/4/17 19:27:50

AI助力Docker与MinIO集成:自动化部署存储解决方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个Docker Compose文件,集成MinIO对象存储服务,并自动生成Python代码示例,展示如何通过SDK上传和下载文件。要求包括:1. MinIO服…

作者头像 李华