Leetcode 第 345 场周赛 Problem D 统计完全连通分量的数量

news/2024/12/29 20:47:28/
  • Leetcode 第 345 场周赛 Problem D 统计完全连通分量的数量
  • 题目
    • 给你一个整数 n 。现有一个包含 n 个顶点的 无向 图,顶点按从 0 到 n - 1 编号。给你一个二维整数数组 edges 其中 edges[i] = [ai, bi] 表示顶点 ai 和 bi 之间存在一条 无向 边。
    • 返回图中 完全连通分量 的数量。
    • 如果在子图中任意两个顶点之间都存在路径,并且子图中没有任何一个顶点与子图外部的顶点共享边,则称其为 连通分量 。
    • 如果连通分量中每对节点之间都存在一条边,则称其为 完全连通分量 。
    • 1 <= n <= 50
    • 0 <= edges.length <= n * (n - 1) / 2
    • edges[i].length == 2
    • 0 <= ai, bi <= n - 1
    • ai != bi
    • 不存在重复的边
  • 解法
    • 并查集 + 图论:通过并查集找到所有连通分量,然后判断每块连通分量的所有边数是否为 n*(n-1)/2,是则代表完全连通分量,因为:边对应的点不错误、无向、不重复、不自连
    • n 为节点数,m 为边数,时间复杂度:O(α(n)+m),空间复杂度:O(n+m)
  • 代码
    /*** 并查集 + 图论:通过并查集找到所有连通分量,然后判断每块连通分量的所有边数是否为 n*(n-1)/2,是则代表完全连通分量,因为:边对应的点不错误、无向、不重复、不自连* n 为节点数,m 为边数,时间复杂度:O(α(n)+m),空间复杂度:O(n+m)*/private int countCompleteComponents(int n, int[][] edges) {// 并查集将连通分量合并在一起int[] parent = unionFind(n, edges);
//        System.out.println(Arrays.toString(parent));// 每个连通分量确定是否是完全连通分量int res = determineCompleteComponents(parent, n, edges);return res;}/*** 并查集将所有边对应的点连通,每条边(a,b)使用 a 指向 b*/private int[] unionFind(int n, int[][] edges) {int edgesLen = edges.length;// 并查集中每个点指向的父亲点,刚开始是自己int[] parent = new int[n];for (int i = 0; i < n; i++) {parent[i] = i;}// 每条边(a,b)使用 a 指向 bfor (int i = 0; i < edgesLen; i++) {int pointA = edges[i][0];int pointB = edges[i][1];union(pointA, pointB, parent);}return parent;}private void union(int pointA, int pointB, int[] parent) {int parentA = find(pointA, parent);int parentB = find(pointB, parent);parent[parentA] = parent[parentB];}private int find(int pointA, int[] parent) {if (parent[pointA] == pointA) {return pointA;}// 路径压缩parent[pointA] = find(parent[pointA], parent);return parent[pointA];}/*** 判断每块连通分量的所有边数是否为 n*(n-1)/2,是则代表完全连通分量,因为:边对应的点不错误、无向、不重复、不自连*/private int determineCompleteComponents(int[] parent, int n, int[][] edges) {Map<Integer, List<Integer>> completeMap = new HashMap<>((n / 3) << 2);// 根据并查集将同一个连通分量放在同一个 List 中for (int i = 0; i < n; i++) {int parentPoint = find(i, parent);List<Integer> completeList = completeMap.getOrDefault(parentPoint, new ArrayList<>(n));completeList.add(i);completeMap.put(parentPoint, completeList);}
//        System.out.println(completeMap);// 将边计数到对应连通分量中Map<Integer, Integer> completeEdgesCountMap = new HashMap<>((completeMap.size() / 3) << 2);int edgesLen = edges.length;for (int i = 0; i < edgesLen; i++) {int parentPoint = find(edges[i][0], parent);completeEdgesCountMap.put(parentPoint, completeEdgesCountMap.getOrDefault(parentPoint, 0) + 1);}
//        System.out.println(completeEdgesCountMap);// 每个连通分量判断是否是完全连通分量int count = 0;for (Map.Entry<Integer, List<Integer>> completeEntry : completeMap.entrySet()) {int completeEdgesCount = completeEdgesCountMap.getOrDefault(completeEntry.getKey(), 0);int completePointCount = completeEntry.getValue().size();if (completePointCount * (completePointCount - 1) / 2 == completeEdgesCount) {count++;}}return count;}

http://www.ppmy.cn/news/69489.html

相关文章

大咖齐聚CCIG论坛——文档图像智能分析的产业前沿

目录 1 文档图像智能分析技术2 大咖齐聚CCIG20233 议题介绍3.1 从模式识别到类脑研究3.2 视觉-语言预训练模型演进及应用3.3 篡改文本图像的生成和检测3.4 智能文档处理在工业界的应用与挑战 4 观看入口&议程 1 文档图像智能分析技术 文档图像智能分析是指使用计算机视觉和…

Maven基础篇

Maven基本概念 Maven是什么 maven的本质是一个项目管理工程&#xff0c;将项目开发和管理过程抽象成一个项目对象模型&#xff08;POM&#xff09; POM&#xff08;Project Object Model&#xff09;&#xff1a;项目对象模型 作用 项目构建&#xff1a;提供标准的、跨平台…

Spring IOC 原理以及实现源码分析

前言 在 Spring 程序设计中&#xff0c;IOC (Inversion of Control) 即控制反转是一个重要的概念&#xff0c;它是 Spring 框架的核心机制之一&#xff0c;在程序中广泛使用。本文将会对 Spring IOC 的概念、实现原理和源码进行详细的解析。 控制反转&#xff08;IoC&#xff…

在外远程NAS群晖Drive - 群晖Drive挂载电脑磁盘同步备份【无需公网IP】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 转发自CSDN远程穿透的文章&#xff1a;【…

AI题目整理

文章目录 1、网络配置时batchsize的大小怎样设置?过小和过大分别有什么特点?2、设置学习率衰减的原因?3、有哪些分类算法?4、分类和回归的区别?5、请描述一下K-means聚类的过程?6、训练集、测试集、验证集的作用?7、请讲解一下k折交叉验证?8、分类和聚类的区别?9、讲述…

图像分割(Segmentation)

文章目录 图像分割FCNU-NetSegNetDeepLab图像分割常用数据集 图像分割 图像分割是预测图像中每一个像素所属的类别或者物体。基于深度学习的图像分割算法主要分为两类&#xff1a; 语义分割&#xff08;Semantic Segmentation&#xff09; 为图像中的每个像素分配一个类别。 …

瑞吉外卖 - 项目介绍(1)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

【ROS2知识】用Robot Localization包进行传感器融合

目录 一、说明 二、Robot Localization包概述 2.1 卡尔曼滤波模型 三、Robot Localization包安装配置 3.2 安装Robot Localizat