685. 冗余连接 II

2024-04-15 01:12
文章标签 连接 ii 冗余 685

本文主要是介绍685. 冗余连接 II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

685. 冗余连接 II

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
  • 错误经验吸取

原题链接:

685. 冗余连接 II

https://leetcode.cn/problems/redundant-connection-ii/description/

完成情况:

解题思路:

在这里插入代码片

参考代码:

package 代码随想录.并查集;import java.util.ArrayList;public class _685冗余连接II {int N_node = 1002;int fatherPaths [] ;public _685冗余连接II() {fatherPaths = new int[N_node];//并查集初始化for (int i = 0; i < N_node; i++){fatherPaths[i] =  i;}}/*** 有向图形成输,然后去除掉节点,存在多个 节点则删除掉最后一个节点* @param edges* @return*/public int[] findRedundantDirectedConnection(int[][] edges) {//这次主要是多了一个方向,构造父亲节点,寻根的时候要考虑方向问题int [] inDegree = new int[N_node];  //记录入度边for (int i = 0;i< edges.length;i++){//入度边inDegree[edges[i][1]] += 1;}//找出入度为 2的节点所对应的边,注意要倒序,因为优先返回最后出现在二维数组中的答案ArrayList<Integer> twoInDegree = new ArrayList<Integer>();  //注意要重点留意那些有多个入度的边,因为如果只有一个节点的话,你删除掉了那个节点,那么就会导致出现单节点,就无法构成一颗树for (int i = edges.length - 1;i>=0;i--){if (inDegree[edges[i][1]] == 2){    //只要大于1条边就记录下来twoInDegree.add(i);}}//处理图中情况1 和情况2//如果有入度为2的节点,那么一定是两条边里删除一个,看看删哪个可以构成树if (!twoInDegree.isEmpty()){if (isTreeAfterRemoveEdge(edges,twoInDegree.get(0))){return edges[twoInDegree.get(0)];}return edges[twoInDegree.get(1)];}//明确没有入度大于2的情况了,那么一定有有向环,找到构成环的边返回就可以了if (!twoInDegree.isEmpty()){if (isTreeAfterRemoveEdge(edges,twoInDegree.get(0))){return edges[twoInDegree.get(0)];}return edges[twoInDegree.get(1)];}//明确没有入度为2的情况,那么 一定有有向环,找到构成环的边返回就可以了return getRemoveEdge(edges);}/*** 在有向图里找到删除的那条边,使其变成树* @param edges* @return 要删除的边*/private int[] getRemoveEdge(int[][] edges) {initFatherPath();for (int i = 0; i < edges.length; i++) {if (sameEdge(edges[i][0], edges[i][1])){    //构成 有向环了,就删除要删除的边return edges[i];}joinEdge(edges[i][0],edges[i][1]);}return null;}/**** @param edgeA* @param edgeB*/private void joinEdge(int edgeA, int edgeB) {edgeA = fatherPaths[edgeA];edgeB = fatherPaths[edgeB];if (edgeA == edgeB) return;fatherPaths[edgeB] = edgeA; //     A -> B}/**** @param edgeA* @param edgeB* @return*/private boolean sameEdge(int edgeA, int edgeB) {edgeA = fatherPaths[edgeA];edgeB = fatherPaths[edgeB];return edgeB == edgeA;}/****/private void initFatherPath() {//并查集初始化for (int i =0;i<N_node;++i){fatherPaths[i] = i;}}/*** 删一条边之后判断是不是树* @param edges* @param deleteEdge 要删除的边* @return  true: 是树, false: 不是树*/private boolean isTreeAfterRemoveEdge(int[][] edges, int deleteEdge) {initFatherPath();for (int i = 0; i < edges.length;i++){if (i == deleteEdge)    continue;if (sameEdge(edges[i][0],edges[i][1])){ //构成有向环了,一定不是树return false;}joinEdge(edges[i][0],edges[i][1]);}return true;}
}

错误经验吸取

这篇关于685. 冗余连接 II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904528

相关文章

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

Java 连接Sql sever 2008

Java 连接Sql sever 2008 /Sql sever 2008 R2 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class TestJDBC

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

nginx长连接的问题

转自: http://www.360doc.com/content/12/1108/17/1073512_246644318.shtml

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。