/**
* 685. 冗余连接 II
* @author wsq
* @date 2020/09/17
在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。
输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。
结果图是一个以边组成的二维数组。 每一个边 的元素是一对 [u, v],用以表示有向图中连接顶点 u 和顶点 v 的边,其中 u 是 v 的一个父节点。
返回一条能删除的边,使得剩下的图是有N个节点的有根树。若有多个答案,返回最后出现在给定二维数组的答案。
示例 1:
输入: [[1,2], [1,3], [2,3]]
输出: [2,3]
解释: 给定的有向图如下:
1
/ \
v v
2-->3
示例 2:
输入: [[1,2], [2,3], [3,4], [4,1], [1,5]]
输出: [4,1]
解释: 给定的有向图如下:
5 <- 1 -> 2
^ |
| v
4 <- 3
链接:https://leetcode-cn.com/problems/redundant-connection-ii
*/
package com.wsq.leetcode;
import java.util.Arrays;
public class FindRedundantDirectedConnection {
/**
* 题解参照:
* https://leetcode-cn.com/problems/redundant-connection-ii/solution/bing-cha-ji-java-by-liweiwei1419/
* @param edges
* @return
*/
public int[] findRedundantDirectedConnection(int[][] edges) {
// 边数统计
int len = edges.length;
// step1 入度统计
int[] inDegree = new int[len + 1];
for(int[] edge: edges) {
inDegree[edge[1]]++;
}
// step2: 删除入度为2的边,看看是否成形成环
// 由于题目要求删除靠后的边,因此这里删除的时候从后向前删除
for(int i = len - 1; i >= 0; i--) {
if(inDegree[edges[i][1]] == 2) {
if(!judgeCircle(edges, len, i)) {
return edges[i];
}
}
}
// step3:再尝试删除入度为1的边
for(int i = len -1; i >= 0; i--) {
if(inDegree[edges[i][1]] == 1) {
if(!judgeCircle(edges, len, i)) {
return edges[i];
}
}
}
throw new IllegalArgumentException("输入不符合要求。");
}
/**
* 检验除了 将要删除的边,其他边是否构成环
* @param edges
* @param len 节点总数
* @param removeEdgeIndex 删除的边的下标
* @return 构成环,返回true,否则返回False
*/
public boolean judgeCircle(int[][] edges, int len, int removeEdgeIndex) {
// 由于树节点是从1开始的,为了方便,使得创建父节点数组时多创建一个
UnionFind unionFind = new UnionFind(len + 1);
for(int i = 0; i < len; i++) {
if(i == removeEdgeIndex) {
continue;
}
if(!unionFind.union(edges[i][0], edges[i][1])) {
return true;
}
}
return false;
}
public class UnionFind{
// 存储父节点
private int[] parent;
public UnionFind(int n) {
parent = new int[n];
for(int i = 0; i < n; i++) {
parent[i] = i;
}
}
/**
* 寻找x的根节点,并且将所在路径进行压缩
* 最终目的就是将所有的节点都直接指向根节点
* @param x
* @return
*/
public int find(int x) {
while(x != parent[x]) {
// 路径压缩(隔代压缩)
parent[x] = parent[parent[x]];
x = parent[x];
}
return x;
}
/**
* 合并两节点
* @param x
* @param y
* @return 如果合并成功返回true
*/
public boolean union(int x, int y) {
int rootX = find(x);
int rootY = find(y);
if(rootX == rootY) {
return false;
}
parent[rootX] = rootY;
return true;
}
}
public static void main(String[] args) {
FindRedundantDirectedConnection f = new FindRedundantDirectedConnection();
int[][] edges = {{1, 2}, {2, 3}, {3, 1}, {1, 4}};
int[] res = f.findRedundantDirectedConnection(edges);
System.out.println(Arrays.toString(res));
}
}
相关推荐
SAP BSP网页开发入门:从SE80创建到MVC实战(附成品展示)
本文详细介绍了SAP BSP网页开发的入门与实战,从SE80环境搭建到MVC架构实现的全流程。通过具体案例和代码示例,帮助开发者掌握业务服务器页面(BSP)技术,提升SAP Web化转型中的开发效率,适用于需要扩展SAP功能的企业场景。
685. 冗余连接 II--(每日一难phase--day13)
leetcode hard 并查集,图
BACnet/IP BBMD跨网段通信深度解析与最佳实践
本文介绍了在BACnet/IP网络中通过BBMD实现跨子网设备通信的关键配置方法。重点阐述了广播分发表(BDT)中掩码设置的重要性:使用子网掩码(255.255.255.0)会导致路由器拦截广播消息,而必须采用主机掩码(255.255.255.255)才能启用单播隧道机制,使BACnet广播消息封装为可路由的单播UDP包。文章详细说明了BDT条目的正确配置格式、BIP广播地址的作用,并提供了验证步骤,强调在跨网段场景中,正确设置掩码是确保设备发现和通信成功的关键因素。
【个人笔记】685. 冗余连接 II 的解释(并查集)
所以这里只处理不成环的情况,入度为2时的边记为conflict,并跳过这种可能会导致冗余的边(无论是情况1)的真冗余边还是2)的非冗余边)。由于肯定存在一条冗余边,如果只有circle,那就是circle,如果只有conflict,那就是conflict,如果两个都有,说明是(1)的成环的情况(a)(1)有一个结点有2个入度(破环其他结点只有一个入度的条件)(可能成环可能不成环)(2)形成一个每个节点都只有一个入度的环(破环根节点入度为0的条件)(成环)(a)没去掉真正的冗余边,会出现情况(2)成环。
YOLOv8n行人检测实战:从数据集准备到模型训练
本文详细介绍了使用YOLOv8n进行行人检测的完整流程。首先阐述了YOLOv8的优势:高速推理(300+FPS)、更高精度、易用性和轻量化(仅6MB)。接着通过Docker搭建GPU训练环境,配置32GB共享内存避免数据加载问题,并安装必要的框架和OpenCV组件。数据集采用COCO2017标注格式,包含归一化坐标的YOLO标签文件。通过可视化脚本验证标注准确性后,提出多数据集融合训练策略以增强模型泛化能力。最后使用Ultralytics框架启动训练,展现了从环境搭建到模型训练的完整技术路径。该方案兼顾检测
Qt 调用YOLO模型(代码)
本文介绍了如何在 Qt C++ 环境中集成 YOLO 模型进行目标检测,包括模型封装、界面设计和实时处理等关键步骤。通过这种方法,你可以快速开发出具有目标检测功能的 Qt 应用程序,应用于监控系统、机器人视觉、图像分析等多个领域。
JAVA程序设计:冗余连接 II(LeetCode:685)
在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。 每一个边 的元素是一对 [u, v],用...
IGCT 测试原理概述
IGCT(Integrated Gate-Commutated Thyristor,集成门极换流晶闸管)是一种高功率半导体器件,基于门极可关断晶闸管(GTO)的原理,但通过集成门极驱动单元和优化结构(如硬驱动技术),实现了更低的导通损耗、更快的开关速度和更高的可靠性。它适用于中高压大功率应用,如高压直流输电(HVDC)、中压变频器和模块化多电平变换器(MMC)。IGCT 的结构为四层 p-n-p-n 器件,门极电流控制导通和关断,阳极电流在关断时快速换流至门极,通常在 1 μs 内完成。
LeetCode 685.冗余连接 II 题解
输入一个有向图,该有向图是由n个节点组成的树和一条附加有向边构成。返回一条能删除的边,使得剩下的图是有n个节点的有根树;有根树指满足以下条件的有向图:该树只有一个根节点,所有其他节点都是该根节点的后继。该树除根节点之外的每一个节点都有且只有一个父节点,根节点没有父节点。由此可以分两步进行:在出现结果一时,找出节点入度为2的点,这个点是两条有向边的head点,找出这两条边。原有向图本来是一颗树,在此前提下添加了一条边使得有向图不再是一颗树。在出现结果二时,利用基础查并集方法找到最先无法join的边,输出。
外设测试 - ATAES132A 加解密芯片测试
原理 使用芯片官方提供的读写操作库,进行先写后读并校验,确认数据一致。 示例代码 int main(void) { uint8_t ret; aes132p_enable_interface(); ret = write_memory_test(); if (ret != AES132_FUNCTION_RETCODE_SUCCESS) { aes132p_disable_interface(); printf
181、LLC谐振变换器的PCB设计实战(文件归档)
PCB设计实战经验总结:LLC谐振变换器的关键要点 本文通过实际案例总结了LLC谐振变换器PCB设计中的核心经验和常见误区。重点包括: 文件命名规范(项目代号_板卡类型_版本号_日期格式) 四层板标准层叠结构设计要点 谐振回路走线原则(宽度、长度控制) 地线处理技巧(功率地/控制地隔离) 散热设计注意事项(MOSFET过孔阵列、变压器布局) 完整的文件归档清单(Gerber、钻孔、装配图等) 作者特别强调,良好的设计归档习惯能显著降低生产问题概率,建议采用双重备份机制。文中多个真实案例(如谐振频率偏移、EM
LeetCode 685. 冗余连接 II
文章目录解法1:并查集 https://leetcode-cn.com/problems/redundant-connection-ii/ 难度:困难 在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数
基于Python的虚拟货币社区情绪分析与市场价格预测爬虫实现
本文探讨了如何利用Python爬虫技术获取虚拟货币社区数据,并通过情感分析预测市场价格走势。我们将使用最新的异步爬虫框架、自然语言处理技术和机器学习模型,构建一个完整的社区情绪分析系统。本文提供了详细的代码实现和理论解释,适合作为毕业设计参考。关键词:Python爬虫、虚拟货币、情感分析、价格预测、异步爬虫、机器学习爬虫框架aiohttp和httpx用于异步HTTP请求HTML解析和parsel数据存储MongoDB和Pandas用于数据处理自然语言处理库和VADER情感分析工具机器学习和。
Leetcode 685. 冗余连接 II C++
Leetcode 685. 冗余连接 II 题目 在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。 每一个边 的元素是一对 [u, v],用以表示有向图中连接顶点 u 和顶点 v 的边,其中 u 是 v 的一个
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
685. 冗余连接 II
685. 冗余连接 II 在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。 每一个边 的元素是一对 [u, v],用以表示有向图中连接顶点 u 和顶点 v 的边,其中 u 是 v 的一个父节点。 返
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
leetcode 685. 冗余连接 II
leetcode 685. 冗余连接 II 题目详情 题目链接 在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。 每一个边 的元素是一对 [u, v],用以表示有向图中连接顶点 u 和顶点 v 的边,其中 u
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
【华为机试】685. 冗余连接 II
本文分析了LeetCode 685题"冗余连接II"的解题思路。题目要求在给定的有向图中删除一条边,使其成为合法的有根树。关键是要处理两种冗余情况:节点入度为2和存在有向环。算法通过入度统计和并查集检测来识别问题边,分为两种情况处理:当存在入度为2的节点时,需在两条候选边中选择正确的删除边;否则直接检测并删除构成环的最后一条边。时间复杂度为O(n),空间复杂度为O(n),其中n为边数。文中提供了详细的算法流程图和关键实现技巧,包括并查集优化、入度检测和环检测函数。
684. 冗余连接 685. 冗余连接 II
684. 冗余连接 在本问题中, 树指的是一个连通且无环的无向图。 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。 返回一条可以删去的边,使得结果图是一个有着N个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边 [u, v] 应满足相同的格式 u
685.冗余连接II
685.冗余连接II
Day47 | 684. 冗余连接、685. 冗余连接 II
685. 冗余连接 II。
Leetcode刷题笔记 685. 冗余连接 II
685. 冗余连接 II 知识点:并查集 时间:2020年9月17日 题目链接:https://leetcode-cn.com/problems/redundant-connection-ii/ 题目 在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在
leetcode685.冗余连接II
对于下图这个情况就是选择删除【3,1】或者【2,1】,这里的选择是有讲究的,如果选择删除【3,1】,那么剩余的n-1个顶点和n-1个边必定构成环(用并查集可以判定);所以选择删除【2,1】,剩余的顶点和边正好构成有向树。但是下面这个实例不行,如果直接用并查集删除的是【1,4】,没有保证树只有一个根节点且没有保证是有向树(顶点1被两个顶点指向)第二种情况是不存在入度为2的顶点,只存在入度为1的顶点,也就是官方给的实例1和2,对于这种情况其实就是冗余连接I的情形,只需要用并查集找到多余的边删除就行。
leetcode685. 冗余连接 II/并查集
文章目录题目:685. 冗余连接 II基本思想:并查集 题目:685. 冗余连接 II 在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。 每一个边 的元素是一对 [u, v],用以表示有向图中连接顶点 u 和顶
【Leetcode刷题篇】- Leetcode685 冗余连接II
并查集-1.Leetcode685 冗余连接II 在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。 输入一个有向图,该图由一个有着 n 个节点(节点值不重复,从 1 到 n)的树及一条附加的有向边构成。附加的边包含在 1 到 n 中的两个不同顶点间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组 edges 。 每个元素是一对 [ui, vi],用以表示 有向 图中连
1万+



被折叠的 条评论
为什么被折叠?



