zoukankan      html  css  js  c++  java
  • 323. Number of Connected Components in an Undirected Graph

    package LeetCode_323
    
    import java.util.*
    import kotlin.collections.ArrayList
    import kotlin.collections.HashMap
    
    /**
     * 323. Number of Connected Components in an Undirected Graph
     * (Prime)
     * 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:
    Input: n = 5 and edges = [[0, 1], [1, 2], [3, 4]]
    0          3
    |          |
    1 --- 2    4
    Output: 2
    
    Example 2:
    Input: n = 5 and edges = [[0, 1], [1, 2], [2, 3], [3, 4]]
    0           4
    |           |
    1 --- 2 --- 3
    Output:  1
    Note:
    
    You can assume that no duplicate edges will appear in edges.
    Since all edges are undirected, [0, 1] is the same as [1, 0] and thus will not appear together in edges.
     * */
    class Solution {
        /*
        * solution: BFS, Time complexity:O(e+n), Space complexity:O(n)
        * */
        fun countComponents(n: Int, edges: Array<Pair<Int, Int>>): Int {
            var result = 0
            val visited = BooleanArray(n)
            //create graph
            val graph = HashMap<Int, ArrayList<Int>>()
            for (i in 0 until n) {
                graph.put(i, ArrayList())
            }
            for (edge in edges) {
                graph[edge.first]!!.add(edge.second)
                graph[edge.second]!!.add(edge.first)
            }
            //queue for BFS
            val queue = LinkedList<Int>()
            for (i in 0 until n) {
                if (visited[i]) {
                    continue
                }
                result++
                queue.offer(i)
                while (queue.isNotEmpty()) {
                    val cur = queue.poll()
                    if (!visited[cur]) {
                        visited[cur] = true
                        val list = graph.get(cur)
                        if (list != null) {
                            for (g in list) {
                                queue.offer(g)
                            }
                        }
                    }
                }
            }
            return result
        }
    }
  • 相关阅读:
    linux安装部署Nginx
    一个简单的负载均衡的示例
    NGINX的几个应用场景
    原生的数据库访问和操作
    java中的神奇"this"
    Confluence 6 自定义空间布局
    Confluence 6 可以自定义的元素
    Confluence 6 编辑一个空间的配色方案
    Confluence 6 文档主题合并问答
    Confluence 6 为一个空间应用一个主题
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13282068.html
Copyright © 2011-2022 走看看