当前位置: 首页 > news >正文

java数据结构与算法刷题-----LeetCode684. 冗余连接

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

文章目录

    • 并查集

在这里插入图片描述

并查集

解题思路:时间复杂度O( n ∗ l o g 2 n n*log_2n nlog2n),空间复杂度O( n n n)
  1. 并查集是图论的经典算法,主要用于处理不相交集合的合并问题,常用于求连通子图,求最小生成树的Kruskal算法和求最近公共祖先(LCA)等等
  2. 其代码操作非常简单,初始化init,查询find,合并union
  1. 初始化操作:用一个数组parent来存储每个顶点的祖先,初始时将自己设置为自己的祖先
    在这里插入图片描述
  2. 查询操作:找到i的祖先,index是否是祖先的条件为,parent[index] == index.入果不满足,就需要找到index的祖先x,并更新parent[index] = x
    在这里插入图片描述
  3. 合并操作:将两个集合index1和index2合并,直接找到两个集合的祖先x和y,让x指向y
    在这里插入图片描述
  1. 根据题目描述,一棵树中,边的数量比结点数量少1,但是现在加了一条边,让这颗树的边和结点数量一致了
  2. 树是连通无环的无向图,但是多了一条边就会出现环。也就是说,这道题的本质上就是让我们求出导致环出现的这条边(导致两个顶点属于同一连通分量的边)
  3. 使用并查集,每个集合代表一个连通分量,初始每个结点都属于不同连通分量。遍历每一条边连接的两个顶点
  1. 两个顶点属于不同连通分量,说明遍历到当前边之前,两个顶点不连通,因此当前边不会导致环的出现,则合并两个顶点的连通分量
  2. 两个顶点属于相同连通分量,说明在遍历到当前边之前,两个顶点已经连通(间接),而这条边又将两个顶点直接连通,从而导致环的出现,则它就是罪魁祸首。
代码

在这里插入图片描述

class Solution {public int[] findRedundantConnection(int[][] edges) {int n = edges.length;//顶点个数int[] parent = new int[n + 1];//并查集中下标从1开始for (int i = 1; i <= n; i++) {parent[i] = i;}//遍历每个顶点的边的信息for (int i = 0; i < n; i++) {int[] edge = edges[i];//获取顶点i的边int node1 = edge[0], node2 = edge[1];//获取两条边相邻的顶点if (find(parent, node1) != find(parent, node2)) {//如果和顶点i都不属于同一个集合(连通分量)union(parent, node1, node2);//说明这条边不会导致环的出现,将两个顶点加入并查集} else {//如果属于同一个集合,说明人家两个顶点已经间接连接一起了,现在你这条边居然又把我俩直接连接了起来return edge;//此边是构成环的罪魁祸首,将其返回}}return new int[0];//无结果返回空}//并查集代码,合并public void union(int[] parent, int index1, int index2) {//合并index1和index2的步骤为:找到index1的祖先,然后找到index2的祖先//让index1的祖先指向index2的祖先,完成两个集合的合并。parent[find(parent, index1)] = find(parent, index2);}//从parent中查找index的祖先public int find(int[] parent, int index) {if (parent[index] != index) {//如果index不是自己指向自己,说明它自己不是集合中的根节点(祖先),他也有自己的祖先parent[index] = find(parent, parent[index]);//不断找到其祖先,然后将其祖先记录到parent[index]位置,保证parent[index]只要find一次,就必须指向index的祖先}return parent[index];//返回自己的祖先}
}

相关文章:

java数据结构与算法刷题-----LeetCode684. 冗余连接

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 并查集 并查集 解题思路&#xff1a;时间复杂度O( n ∗ l o g 2…...

循环神经网络简介

卷积神经网络相当于人类的视觉&#xff0c;但是它并没有记忆能力&#xff0c;所以它只能处理一种特定的视觉任务&#xff0c;没办法根据以前的记忆来处理新的任务。比如&#xff0c;在一场电影中推断下一个时间点的场景&#xff0c;这个时候仅依赖于现在的场景还不够&#xff0…...

计算机网络 子网掩码与划分子网

一、实验要求与内容 1、需拓扑图和两个主机的IP配置截图。 2、设置网络A内的主机IP地址为“192.168.班内学号.2”&#xff0c;子网掩码为“255.255.255.128”&#xff0c;网关为“192.168.班内学号.1”&#xff1b;设置网络B内的主机IP地址为“192.168.班内学号100.2”&#…...

HUD抬头显示器中如何设计LCD的阳光倒灌实验

关键词&#xff1a;阳光倒灌实验、HUD光照温升测试、LCD光照温升测试、太阳光模拟器 HUD&#xff08;Head-Up Display&#xff0c;即抬头显示器&#xff09;是一种将信息直接投影到驾驶员视线中的技术&#xff0c;通常用于飞机、汽车等驾驶舱内。HUD系统中的LCD&#xff08;Liq…...

Shoplazza闪耀Shoptalk 2024,新零售创新解决方案引领行业新篇章!

在近期举办的全球零售业瞩目盛事——Shoptalk 2024大会上,全球*的零售技术平台-店匠科技(Shoplazza)以其*的创新实力与前瞻的技术理念,成功吸引了与会者的广泛关注。此次盛会于3月17日至20日在拉斯维加斯曼德勒湾隆重举行,汇聚了逾万名行业精英。在这场零售业的盛大聚会上,Shop…...

Linux:sprintf、snprintf、vsprintf、asprintf、vasprintf比较

这些函数都在stdio.h里&#xff0c;不过不同系统不同库&#xff0c;有些函数不一定提供。 1. sprintf 函数原型&#xff1a; int sprintf (char *str, const char *format, ...); extern int sprintf (char *__restrict __s, const char *__restrict __format, ...); 功能是将…...

Github远程仓库改名字之后,本地git如何配置?

文章目录 缘由解决方案 缘由 今天在github创建一个仓库&#xff0c;备份一下本地电脑上的资料。起初随便起一个仓库名字&#xff0c;后来修改之。既然远程仓库改名&#xff0c;那么本地仓库需要更新地址。这里采用SSH格式。 解决方案 如果你的GitHub仓库改名了&#xff0c;你…...

Objective-C学习笔记(ARC,分类,延展)4.10

1.自动释放池autoreleasepool&#xff1a;存入到自动释放池的对象&#xff0c;在自动释放池销毁时&#xff0c;会自动调用池内所有对象的release方法。调用autorelease方法将对象放入自动释放池。 Person *p1 [ [ [ Person alloc ] init ] autorelease]; 2.在类方法里写一个…...

02 Git 之IDEA 集成使用 GitHub(Git同时管理本地仓库和远程仓库)

2 .IDEA 集成使用 GitHub&#xff08;Git同时管理本地仓库和远程仓库&#xff09; 首先在 IDEA 的设置中绑定 GitHub 的账号 先创建一个 test1.txt 文件&#xff0c;内容为 aaa. 最上一栏 VCS&#xff0c; SHARE ON GitHub&#xff0c;然后选择要发送到远程仓库的文件即可。…...

CSS滚动条样式修改

前言 目前我们可以通过 CSS伪类 来实现滚动条的样式修改&#xff0c;以下为修改滚动条样式用到的CSS伪类&#xff1a; ::-webkit-scrollbar — 整个滚动条 ::-webkit-scrollbar-button — 滚动条上的按钮 (上下箭头) ::-webkit-scrollbar-thumb — 滚动条上的滚动滑块 ::-web…...

《零秒思考》像麦肯锡精英一样思考 - 三余书屋 3ysw.net

零秒思考&#xff1a;像麦肯锡精英一样思考 大家好&#xff0c;今天我们要深入探讨的著作是《零秒思考》。在领导提出问题时&#xff0c;我们常常会陷入沉思&#xff0c;却依然难以有所进展&#xff0c;仿佛原地踏步&#xff0c;但是身边的同事却能够立即给出清晰的回答。这种…...

使用docker制作Android镜像(实操可用)

一、安装包准备 1、准备jdk 下载地址&#xff1a;Java Downloads | Oracle 注意版本&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我下载的jdk17&#xff0c;不然后面构建镜像报错&#xff0c;就是版本不对 2、准备安装的工具包 ttps://dev…...

大厂MVP技术JAVA架构师培养

课程介绍 这是一个很强悍的架构师涨薪计划课程&#xff0c;课程由专家级MVP讲师进行教学&#xff0c;分为是一个章节进行分解式面试及讲解&#xff0c;不仅仅是面试&#xff0c;更像是一个专业的架构师研讨会课程。课程内容从数据结构与算法、Spring Framwork、JVM原理、 JUC并…...

uniapp实现文件和图片选择上传功能实现

主要介绍了uni-file-picker文件选择上传,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 上传一张: <template><view class="container example"><uni-forms ref="baseForm" …...

2024认证杯数学建模C题思路模型代码

目录 2024认证杯数学建模C题思路模型代码&#xff1a;4.11开赛后第一时间更新&#xff0c;获取见文末名片 以下为2023年认证杯C题&#xff1a; 2024年认证杯数学建模C题思路模型代码见此 2024认证杯数学建模C题思路模型代码&#xff1a;4.11开赛后第一时间更新&#xff0c;获…...

springcloud项目中,nacos远程的坑

我将允许重写放在了远程nacos的注册中心&#xff0c;还是无法启动。这个bug&#xff0c;想想确实也可以解决。 解决方案 1.配置到bootstrap.yml或者application.yml中 2.实现EnvironmentPostProcessor并设置值&#xff0c;并在META-INF中注入我们的类 org.springframework.boot…...

南京航空航天大学-考研科目-513测试技术综合 高分整理内容资料-01-单片机原理及应用分层教程-单片机有关常识部分

系列文章目录 高分整理内容资料-01-单片机原理及应用分层教程-单片机有关常识部分 文章目录 系列文章目录前言总结 前言 单片机的基础内容繁杂&#xff0c;有很多同学基础不是很好&#xff0c;对一些细节也没有很好的把握。非常推荐大家去学习一下b站上的哈工大 单片机原理及…...

【python】Flask Web框架

文章目录 WSGI(Web服务器网关接口)示例Web应用程序Web框架Flask框架创建项目安装Flask创建一个基本的 Flask 应用程序调试模式路由添加变量构造URLHTTP方法静态文件模板—— Jinja2模板文件(Template File)<...

Electron+React 搭建桌面应用

创建应用程序 创建 Electron 应用 使用 Webpack 创建新的 Electron 应用程序&#xff1a; npm init electron-applatest my-new-app -- --templatewebpack 启动应用 npm start 设置 Webpack 配置 添加依赖包&#xff0c;确保可以正确使用 JSX 和其他 React 功能&#xff…...

基于Android的记单词App系统的设计与实现

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…...

从SolidWorks到ROS:六自由度机械臂URDF模型转换实战指南

1. 从SolidWorks到ROS的桥梁&#xff1a;URDF模型转换概述 当你费尽心思在SolidWorks中完成了六自由度机械臂的三维建模&#xff0c;看着那些精密的齿轮和连杆在软件中流畅转动时&#xff0c;脑海中可能已经浮现出它在ROS环境中大展身手的场景。但问题来了&#xff1a;如何让这…...

Unity URP 中 Mipmap 纹理多级渐远技术 解决远处纹理闪烁(摩尔纹)与性能优化的完整指南

什么是 Mipmap&#xff1f;Mipmap&#xff08;多重贴图渐远技术&#xff09;是一种经典的纹理渲染优化技术。它为每张纹理生成一系列预计算的缩小版本&#xff0c;从原始分辨率开始&#xff0c;逐级缩小至 11 像素。工作原理当 3D 场景中的物体远离摄像机时&#xff0c;其在屏幕…...

CLIP图文匹配测试工具:5分钟本地部署,零基础验证AI识图能力

CLIP图文匹配测试工具&#xff1a;5分钟本地部署&#xff0c;零基础验证AI识图能力 1. 工具简介与核心价值 你是否遇到过这样的场景&#xff1a;手头有一批产品图片&#xff0c;需要快速判断它们与哪些文字描述最匹配&#xff1f;或者想验证AI模型是否能准确理解图片内容&…...

高效双电源自动切换电路的设计与实现

1. 双电源自动切换电路的应用场景 双电源自动切换电路在现代电子设备中扮演着关键角色&#xff0c;它能确保设备在不同供电来源之间无缝切换&#xff0c;避免断电导致的系统崩溃。这种电路设计特别适合以下场景&#xff1a; 便携式设备&#xff1a;比如蓝牙音箱、移动电源等&am…...

终极指南:如何使用Harepacker-resurrected打造个性化MapleStory游戏体验

终极指南&#xff1a;如何使用Harepacker-resurrected打造个性化MapleStory游戏体验 【免费下载链接】Harepacker-resurrected All in one .wz file/map editor for MapleStory game files 项目地址: https://gitcode.com/gh_mirrors/ha/Harepacker-resurrected 你是否曾…...

天问Block环境下ASRPRO语音芯片实战:语音交互、GPIO控制与PWM调光开发指南

1. 天问Block与ASRPRO芯片开发入门 第一次接触天问Block和ASRPRO语音芯片时&#xff0c;我被它们的组合惊艳到了。这个开发环境就像乐高积木一样&#xff0c;通过拖拽代码块就能完成复杂的功能开发&#xff0c;特别适合像我这样的硬件爱好者。ASRPRO作为一款专为语音交互设计的…...

终极中文语义理解指南:text2vec-base-chinese如何让AI真正读懂中文

终极中文语义理解指南&#xff1a;text2vec-base-chinese如何让AI真正读懂中文 【免费下载链接】text2vec-base-chinese 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/text2vec-base-chinese 还在为中文文本相似度计算而烦恼吗&#xff1f;text2vec-base-c…...

基于Simulink的自抗扰控制(ADRC)在OBC前级的应用

手把手教你学Simulink——基于Simulink的自抗扰控制(ADRC)在OBC前级的应用​ (附:OBC前级拓扑剖析+ADRC抗扰原理+TD/ESO/NLSEF算法推导+Simulink全模型搭建+动态响应/谐波抑制对比+实机部署指南) 摘要​ 车载充电机(OBC)前级作为交流-直流(AC-DC)整流核心,需将电网…...

MySQL--Day02

约束 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据 为了保证数据库中数据的正确性、有效性、完整性非空约束 NOT NULL唯一约束 UNIQUE主键约束 PRIMARY KEY默认约束 DEFAULT检查约束 CHECK CREATE TABLE user(id int primary key auto_increm…...

用Arduino Uno和纸板DIY一个超静音扫地机器人(附完整代码和接线图)

用Arduino Uno和纸板DIY一个超静音扫地机器人&#xff08;附完整代码和接线图&#xff09; 在宿舍或小公寓里&#xff0c;市售扫地机器人的马达噪音常常让人头疼。特别是对于学生和创客群体来说&#xff0c;既需要保持环境整洁&#xff0c;又不希望打扰到室友或邻居的休息。今天…...