博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]Number of Connected Components in an Undirected Graph
阅读量:6535 次
发布时间:2019-06-24

本文共 1322 字,大约阅读时间需要 4 分钟。

Number of Connected Components in an Undirected Graph

Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to find the number of connected components in an undirected graph.

Example 1:

0          3    |          |    1 --- 2    4

Given n = 5 and edges = [[0, 1], [1, 2], [3, 4]], return 2.

Example 2:

0           4    |           |    1 --- 2 --- 3

Given n = 5 and edges = [[0, 1], [1, 2], [2, 3], [3, 4]], return 1.

分析

典型且很基础的union find题。用一个数组记录各个数字的父节点,然后遍历图,对edge中两个端点做union。最后扫一遍数组,找到根节点个数即可。

time:

time: O(m*h), space: O(n), m表示edge的数量。

代码

public class Solution {    public int countComponents(int n, int[][] edges) {        int[] id = new int[n];                // 初始化        for (int i = 0; i < n; i++) {            id[i] = i;        }                // union        for (int[] edge : edges) {                          int i = root(id, edge[0]);            int j = root(id, edge[1]);            id[i] = j;        }                // 统计根节点个数        int count = 0;        for (int i = 0; i < n; i++) {            if (id[i] == i)                count++;        }        return count;    }        // 找根节点    public int root(int[] id, int i) {        while (i != id[i]) {            id[i] = id[id[i]];            i = id[i];        }        return i;    }}

转载地址:http://fezdo.baihongyu.com/

你可能感兴趣的文章
matlab练习程序(随机游走图像)
查看>>
Linux命令行下运行java.class文件
查看>>
input文本框实现宽度自适应代码实例
查看>>
C#基本数据类型 <思维导图>
查看>>
POJ3321 Apple Tree (树状数组)
查看>>
一个程序员的自白(延迟满足)
查看>>
protocol buffers的编码原理
查看>>
行为型设计模式之命令模式(Command)
查看>>
减少死锁的几个常用方法
查看>>
HDFS 核心原理
查看>>
正确配置jstl的maven依赖,jar包冲突的问题终于解决啦
查看>>
利用KMP算法解决串的模式匹配问题(c++) -- 数据结构
查看>>
登录内网账号后,连接不上内网网址
查看>>
安装 MariaDB
查看>>
Python3学习笔记16-错误和异常
查看>>
图像识别——ubuntu16.04 movidius VPU NCSDK深度学习环境搭建
查看>>
.NET应用架构设计—适当使用活动记录模式代替领域模型模式
查看>>
dev_dbg()
查看>>
关于RVDS的PRESERVE8
查看>>
Tomcat在Mac平台安裝
查看>>