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

leetcode:冗余连接 II[并查集检查环][节点入度]

学习要点

  1. 并查集检查环
  2. 分类讨论

题目链接

        685. 冗余连接 II - 力扣(LeetCode)

题目描述

解法:并查集检查环

class Solution {
public:int Find_Root(vector<int>& v_root, int pos) {while (v_root[pos] > 0) {pos = v_root[pos];}return pos;}bool Is_Tree(vector<vector<int>>& edges, pair<int, int> pair1_edg_rudu2) {vector<int> v_root( edges.size() + 1, -1);for (int i = 0; i < edges.size(); i++) {if (edges[i][0] == pair1_edg_rudu2.first &&edges[i][1] == pair1_edg_rudu2.second) {continue;}int root1 = Find_Root(v_root, edges[i][0]);int root2 = Find_Root(v_root, edges[i][1]);if (root1 != root2) {v_root[edges[i][1]] = root1;} else {return false;}}return true;}vector<int> findRedundantDirectedConnection(vector<vector<int>>& edges) {// 标记入度为2的点int n = edges.size();vector<int> v_find_rudu(n + 1, 0);for (int i = 0; i < edges.size(); i++) {v_find_rudu[edges[i][1]]++;}// 寻找入度为2的点int point_rudu2 = -1;for (int i = 1; i < n + 1; i++) {if (v_find_rudu[i] == 2) {point_rudu2 = i;}}// 如果不存在入度为2的点:并查集解法vector<int> v_root( edges.size() + 1, -1);if (point_rudu2 == -1) {for (int i = 0; i < edges.size(); i++) {int root1 = Find_Root(v_root, edges[i][0]);int root2 = Find_Root(v_root, edges[i][1]);if (root1 != root2) {v_root[edges[i][1]] = root1;} else {return vector<int>{edges[i][0], edges[i][1]};}}return vector<int>();}// 如果存在入度为2的点else {// 倒序寻找这个边pair<int, int> pair1_edg_rudu2;pair<int, int> pair2_edg_rudu2;bool flag1 = true;for (int i = n - 1; i >= 0; i--) {if (flag1 && edges[i][1] == point_rudu2) {pair1_edg_rudu2.first = edges[i][0];pair1_edg_rudu2.second = edges[i][1];flag1 = false;continue;}if (flag1 == false && edges[i][1] == point_rudu2) {pair2_edg_rudu2.first = edges[i][0];pair2_edg_rudu2.second = edges[i][1];break;}}bool is_pair1 = Is_Tree(edges, pair1_edg_rudu2);if (is_pair1) {return vector<int>{pair1_edg_rudu2.first,pair1_edg_rudu2.second};} else {return vector<int>{pair2_edg_rudu2.first,pair2_edg_rudu2.second};}}}
};

http://www.lryc.cn/news/592610.html

相关文章:

  • 【机器人】HOV-SG 开放词汇 | 分层3D场景图 | 语言引导机器人导航
  • vue3+vite 使用scss、sass 全局定义的变量以及使用
  • 【Linux】进程间通信(三)——共享内存和消息队列
  • 特种作业操作证(制冷空调)的考试科目有哪些?
  • Spring AI开发智能客服(Tool calling)
  • 第七章 愿景09 海波龙的坑
  • 链表算法之【链表的中间节点】
  • MSTP+VRRP+DHCP配置实验(ensp)
  • 医疗人工智能的心电图分析:创新技术与临床应用
  • 多组件Canvas ID冲突解决方案
  • Pythonday17
  • 深入理解进程地址空间:虚拟内存与进程独立性
  • 2-大语言模型—理论基础:详解Transformer架构的实现(2)
  • 专题 原型与继承完全指南
  • QT聊天项目DAY15
  • 更适合后端宝宝的前端三件套之HTML
  • GEV/POT/Markov/点过程/贝叶斯极值全解析;基于R语言的极值统计学
  • 设计模式五:桥模式(Bridge Pattern)
  • 关于在VScode中使用git的一些步骤常用命令及其常见问题:
  • Redis工具类
  • RHCE第二次作业
  • MyBatis:配置文件完成增删改查_添加
  • Java 核心工具类 API 详解(一):从 Math 到 Runtime 的实用指南
  • 谷歌浏览器Chrome的多用户配置文件功能
  • 简单易懂,基本地址变换机构
  • 高防IP能够防御CC攻击吗?它具备哪些显著优势?
  • 【easytokenizer】高性能文本 Tokenizer库 | 源码详解与编译安装
  • Java中类加载器及双亲委派机制原理
  • 2023 年 3 月青少年软编等考 C 语言八级真题解析
  • Windows8.1安装哪个版本的vscode?