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

685.冗余连接

685.冗余连接

4:03

// 定义并查集类
class UnionFind{// 构造函数初始化并查集constructor(n){this.parent = new Array(n).fill(0).map((item,index)=>index)this.rank = new Array(n).fill(1)this.count = n}// 查找元素的根节点find(x){if(this.parent[x] !== x){this.parent[x] = this.find(this.parent[x])}return this.parent[x]}// 合并两个集合union(x,y){let rootX = this.find(x)let rootY = this.find(y)if(rootX === rootY){return false}if(this.rank[rootX] < this.rank[rootY]){this.parent[rootX] = rootYthis.rank[rootY] += this.rank[rootX]}else{this.parent[rootY] = rootXthis.rank[rootX] += this.rank[rootY]}this.count--}// 判断两个元素是否属于同一个集合connected(x,y){return this.find(x) === this.find(y)}// 获取集合的数量getCount(){return this.count}
}
/*** @param {number[][]} edges* @return {number[]}*/
// 考虑三种情况:
// 1.附加边指向了我们的根结点,导致所有的节点都有一个父节点,导致出现环;
// 2.附加边没有指向我们根节点,会出现树中某个节点会有两个父亲节点;也有可能会出现环路;
var findRedundantDirectedConnection = function(edges) {// 先要获取节点的个数,就是边的个数let nodeCount = edges.length// 根据节点的个数构造并查集,长度加1,避免从0开始let uf = new UnionFind(nodeCount + 1)//怎么记录产生了两个父节点let parent=[] //记录每一个节点的父节点是多少for(let i=1;i<(nodeCount+1);i++){//边的长度+1parent[i] = i//初始化}let conflit = -1 //记录产生两个父节点的边let cycle = -1 //记录产生环路的边for(i in edges){let edge=edges[i];let node1=edge[0],node2=edge[1];//拿到了两个节点if(parent[node2] != node2){//node2这个节点有两个父节点conflit = i;//记录产生两个父节点的边}else{//否则没有双重父节点,就把他们连起来parent[node2] = node1;if(uf.find(node1) == uf.find(node2)){//如果两个节点的根节点相同,说明产生了环路cycle = i;//记录产生环路的边}else{//既有环路,又有双重节点uf.union(node1,node2);//把两个节点连起来}}}if(conflit < 0){//没有双重父节点产生,就把环路记录下来return edges[cycle];//返回产生环路的边}else{//只有双重父节点产生let conflitEdge = edges[conflit];//拿到产生双重父节点的边if(cycle >= 0){//既有环路,又有双重节点return [parent[conflitEdge[1]],conflitEdge[1]];//有两个入度点}else{return conflitEdge;//只有一个入度点}}
};

http://www.wxhsa.cn/company.asp?id=2972

相关文章:

  • form表单和表单控件
  • 阿里云OSS图片生成缩略图和获取视频的封面方法
  • VSCode 运行 Python
  • [mysql] 卸载
  • 树上问题
  • 突发!美国将复旦微等23家中国实体列入“实体清单”
  • [GenAI] Function Calling
  • form表单
  • 【Zotero7】使用Attanger和百度同步空间如何进行同步?
  • XSS 漏洞挖掘学习
  • str
  • 到底该用 KPI 还是 OKR ?
  • 【重点!!!】必知必会必须掌握的serializers序列化器类之Serializer和ModelSerializer核心区别
  • StringUtils.isNotBlank和StringUtils.isNotEmpty的区别
  • ECT-OS-JiuHuaShan框架元推理,已在DeepSeek上实现agi
  • 9.13CSP-S Day6 模拟赛
  • 助教工作总结
  • 了解一下Redis Stack扩展功能
  • 游戏运行库合集 集成VC++、.NET、DirectX、XNA等千款组件,一键安装游戏必备依赖库 - 指南
  • 【CE】图形化CE游戏教程通关手册 - 详解
  • GZHOIOJ律(三)
  • visual studio 切换重载
  • [AGC022F] Checkers 题解
  • 程序员的副业变现之路:我的双平台矩阵打法
  • Python 潮流周刊#119:Google 停止开发 Pytype!
  • 利用k8s client-go库创建CRD的informer的操作流程
  • Golang并发编程及其高级特性
  • 单个光子的行为、传播特性、物质相互作用及其应用就是[光学原理与应用-449]:量子光学 - 量子光学研究的
  • 和为 K 的子数组-leetcode
  • 元推理agi不是象人思维,而是教人思维,人类脸上挂不住啊