685. 冗余连接 II

Java实现 LeetCode 685 冗余连接 II(并查集+有向图) 685. 冗余连接 II 在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。 每一个边 的元素是一对... 阅读详情
/**
 * 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));
	}
}

保姆级教程:Win10/Win11系统下ArcGIS 10.2中文版完整安装与破解(含License Manager启动失败解决方案) 本文提供Windows 10/11系统下ArcGIS 10.2中文版的完整安装与破解教程,重点解决License Manager启动失败等常见问题。从安装准备、破解文件处理到最终配置验证,详细指导用户完成每一步操作,确保软件正常运行。特别针对主机名修改、端口占用等疑难问题提供专业解决方案。 阅读详情

相关推荐

SAP BSP网页开发入门:从SE80创建到MVC实战(附成品展示)

本文详细介绍了SAP BSP网页开发的入门与实战,从SE80环境搭建到MVC架构实现的全流程。通过具体案例和代码示例,帮助开发者掌握业务服务器页面(BSP)技术,提升SAP Web化转型中的开发效率,适用于需要扩展SAP功能的企业场景。

x1y2z的博客 1万+

685. 冗余连接 II--(每日一难phase--day13)

leetcode hard 并查集,图

weixin_42051691的博客 361

BACnet/IP BBMD跨网段通信深度解析与最佳实践

本文介绍了在BACnet/IP网络中通过BBMD实现跨子网设备通信的关键配置方法。重点阐述了广播分发表(BDT)中掩码设置的重要性:使用子网掩码(255.255.255.0)会导致路由器拦截广播消息,而必须采用主机掩码(255.255.255.255)才能启用单播隧道机制,使BACnet广播消息封装为可路由的单播UDP包。文章详细说明了BDT条目的正确配置格式、BIP广播地址的作用,并提供了验证步骤,强调在跨网段场景中,正确设置掩码是确保设备发现和通信成功的关键因素。

零一架构师的专栏 1537

【个人笔记】685. 冗余连接 II 的解释(并查集)

所以这里只处理不成环的情况,入度为2时的边记为conflict,并跳过这种可能会导致冗余的边(无论是情况1)的真冗余边还是2)的非冗余边)。由于肯定存在一条冗余边,如果只有circle,那就是circle,如果只有conflict,那就是conflict,如果两个都有,说明是(1)的成环的情况(a)(1)有一个结点有2个入度(破环其他结点只有一个入度的条件)(可能成环可能不成环)(2)形成一个每个节点都只有一个入度的环(破环根节点入度为0的条件)(成环)(a)没去掉真正的冗余边,会出现情况(2)成环。

zoey_peak的博客 565

YOLOv8n行人检测实战:从数据集准备到模型训练

本文详细介绍了使用YOLOv8n进行行人检测的完整流程。首先阐述了YOLOv8的优势:高速推理(300+FPS)、更高精度、易用性和轻量化(仅6MB)。接着通过Docker搭建GPU训练环境,配置32GB共享内存避免数据加载问题,并安装必要的框架和OpenCV组件。数据集采用COCO2017标注格式,包含归一化坐标的YOLO标签文件。通过可视化脚本验证标注准确性后,提出多数据集融合训练策略以增强模型泛化能力。最后使用Ultralytics框架启动训练,展现了从环境搭建到模型训练的完整技术路径。该方案兼顾检测

Hi20240217的博客 1096

Qt 调用YOLO模型(代码)

本文介绍了如何在 Qt C++ 环境中集成 YOLO 模型进行目标检测,包括模型封装、界面设计和实时处理等关键步骤。通过这种方法,你可以快速开发出具有目标检测功能的 Qt 应用程序,应用于监控系统、机器人视觉、图像分析等多个领域。

轩宇的博客 260

JAVA程序设计:冗余连接 II(LeetCode:685)

在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。 每一个边 的元素是一对 [u, v],用...

信仰.的博客 572

IGCT 测试原理概述

IGCT(Integrated Gate-Commutated Thyristor,集成门极换流晶闸管)是一种高功率半导体器件,基于门极可关断晶闸管(GTO)的原理,但通过集成门极驱动单元和优化结构(如硬驱动技术),实现了更低的导通损耗、更快的开关速度和更高的可靠性。它适用于中高压大功率应用,如高压直流输电(HVDC)、中压变频器和模块化多电平变换器(MMC)。IGCT 的结构为四层 p-n-p-n 器件,门极电流控制导通和关断,阳极电流在关断时快速换流至门极,通常在 1 μs 内完成。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 238

LeetCode 685.冗余连接 II 题解

输入一个有向图,该有向图是由n个节点组成的树和一条附加有向边构成。返回一条能删除的边,使得剩下的图是有n个节点的有根树;有根树指满足以下条件的有向图:该树只有一个根节点,所有其他节点都是该根节点的后继。该树除根节点之外的每一个节点都有且只有一个父节点,根节点没有父节点。由此可以分两步进行:在出现结果一时,找出节点入度为2的点,这个点是两条有向边的head点,找出这两条边。原有向图本来是一颗树,在此前提下添加了一条边使得有向图不再是一颗树。在出现结果二时,利用基础查并集方法找到最先无法join的边,输出。

m0_67504012的博客 1289

外设测试 - ATAES132A 加解密芯片测试

原理 使用芯片官方提供的读写操作库,进行先写后读并校验,确认数据一致。 示例代码 int main(void) { uint8_t ret; aes132p_enable_interface(); ret = write_memory_test(); if (ret != AES132_FUNCTION_RETCODE_SUCCESS) { aes132p_disable_interface(); printf

一个软件工程师的技术笔记 859

181、LLC谐振变换器的PCB设计实战(文件归档)

PCB设计实战经验总结:LLC谐振变换器的关键要点 本文通过实际案例总结了LLC谐振变换器PCB设计中的核心经验和常见误区。重点包括: 文件命名规范(项目代号_板卡类型_版本号_日期格式) 四层板标准层叠结构设计要点 谐振回路走线原则(宽度、长度控制) 地线处理技巧(功率地/控制地隔离) 散热设计注意事项(MOSFET过孔阵列、变压器布局) 完整的文件归档清单(Gerber、钻孔、装配图等) 作者特别强调,良好的设计归档习惯能显著降低生产问题概率,建议采用双重备份机制。文中多个真实案例(如谐振频率偏移、EM

Jack010169的博客 44

LeetCode 685. 冗余连接 II

文章目录解法1:并查集 https://leetcode-cn.com/problems/redundant-connection-ii/ 难度:困难   在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。   输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。   结果图是一个以边组成的二维数

yleave的博客 426

基于Python的虚拟货币社区情绪分析与市场价格预测爬虫实现

本文探讨了如何利用Python爬虫技术获取虚拟货币社区数据,并通过情感分析预测市场价格走势。我们将使用最新的异步爬虫框架、自然语言处理技术和机器学习模型,构建一个完整的社区情绪分析系统。本文提供了详细的代码实现和理论解释,适合作为毕业设计参考。关键词:Python爬虫、虚拟货币、情感分析、价格预测、异步爬虫、机器学习爬虫框架aiohttp和httpx用于异步HTTP请求HTML解析和parsel数据存储MongoDB和Pandas用于数据处理自然语言处理库和VADER情感分析工具机器学习和。

2201_76125261的博客 524

Leetcode 685. 冗余连接 II C++

Leetcode 685. 冗余连接 II 题目 在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。 每一个边 的元素是一对 [u, v],用以表示有向图中连接顶点 u 和顶点 v 的边,其中 u 是 v 的一个

weixin_43750513的博客 226

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 的一个父节点。 返

小桥流水 148

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

leetcode 685. 冗余连接 II

leetcode 685. 冗余连接 II 题目详情 题目链接 在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。 每一个边 的元素是一对 [u, v],用以表示有向图中连接顶点 u 和顶点 v 的边,其中 u

qq_33789406的博客 153

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为边数。文中提供了详细的算法流程图和关键实现技巧,包括并查集优化、入度检测和环检测函数。

qq_32019341的博客 958

684. 冗余连接 685. 冗余连接 II

684. 冗余连接 在本问题中, 树指的是一个连通且无环的无向图。 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。 返回一条可以删去的边,使得结果图是一个有着N个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边 [u, v] 应满足相同的格式 u

weixin_38688399的博客 231

685.冗余连接II

685.冗余连接II

weixin_45256307的博客 809

Day47 | 684. 冗余连接、685. 冗余连接 II

685. 冗余连接 II。

m0_56545264的博客 220

Leetcode刷题笔记 685. 冗余连接 II

685. 冗余连接 II 知识点:并查集 时间:2020年9月17日 题目链接:https://leetcode-cn.com/problems/redundant-connection-ii/ 题目 在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在

cjl的博客 343

leetcode685.冗余连接II

对于下图这个情况就是选择删除【3,1】或者【2,1】,这里的选择是有讲究的,如果选择删除【3,1】,那么剩余的n-1个顶点和n-1个边必定构成环(用并查集可以判定);所以选择删除【2,1】,剩余的顶点和边正好构成有向树。但是下面这个实例不行,如果直接用并查集删除的是【1,4】,没有保证树只有一个根节点且没有保证是有向树(顶点1被两个顶点指向)第二种情况是不存在入度为2的顶点,只存在入度为1的顶点,也就是官方给的实例1和2,对于这种情况其实就是冗余连接I的情形,只需要用并查集找到多余的边删除就行。

weixin_74175349的博客 438

leetcode685. 冗余连接 II/并查集

文章目录题目:685. 冗余连接 II基本思想:并查集 题目:685. 冗余连接 II 在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。 输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。 每一个边 的元素是一对 [u, v],用以表示有向图中连接顶点 u 和顶

yyf_blog 453

【Leetcode刷题篇】- Leetcode685 冗余连接II

并查集-1.Leetcode685 冗余连接II 在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。 输入一个有向图,该图由一个有着 n 个节点(节点值不重复,从 1 到 n)的树及一条附加的有向边构成。附加的边包含在 1 到 n 中的两个不同顶点间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组 edges 。 每个元素是一对 [ui, vi],用以表示 有向 图中连

Mind_programmonkey的博客 379
上一篇: 19. 删除链表的倒数第N个节点
下一篇: Morris遍历(值得学习的二叉树遍历方法)
Lazy mode
博客等级 码龄10年 13粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值