LeetCode 2685. Count the Number of Complete Components Solution in Java, C++, Python & Go | Explanation + Code

CoderIndeed
0
2685. Count the Number of Complete Components

Description

You are given an integer n. There is an undirected graph with n vertices, numbered from 0 to n - 1. You are given a 2D integer array edges where edges[i] = [ai, bi] denotes that there exists an undirected edge connecting vertices ai and bi.

Return the number of complete connected components of the graph.

A connected component is a subgraph of a graph in which there exists a path between any two vertices, and no vertex of the subgraph shares an edge with a vertex outside of the subgraph.

A connected component is said to be complete if there exists an edge between every pair of its vertices.

 

Example 1:

Input: n = 6, edges = [[0,1],[0,2],[1,2],[3,4]]
Output: 3
Explanation: From the picture above, one can see that all of the components of this graph are complete.

Example 2:

Input: n = 6, edges = [[0,1],[0,2],[1,2],[3,4],[3,5]]
Output: 1
Explanation: The component containing vertices 0, 1, and 2 is complete since there is an edge between every pair of two vertices. On the other hand, the component containing vertices 3, 4, and 5 is not complete since there is no edge between vertices 4 and 5. Thus, the number of complete components in this graph is 1.

 

Constraints:

  • 1 <= n <= 50
  • 0 <= edges.length <= n * (n - 1) / 2
  • edges[i].length == 2
  • 0 <= ai, bi <= n - 1
  • ai != bi
  • There are no repeated edges.

Solutions

Solution 1

PythonJavaC++Go
class Solution: def countCompleteComponents(self, n: int, edges: List[List[int]]) -> int: def dfs(i: int) -> (int, int): vis[i] = True x, y = 1, len(g[i]) for j in g[i]: if not vis[j]: a, b = dfs(j) x += a y += b return x, y g = defaultdict(list) for a, b in edges: g[a].append(b) g[b].append(a) vis = [False] * n ans = 0 for i in range(n): if not vis[i]: a, b = dfs(i) ans += a * (a - 1) == b return ans(code-box)

Solution 2: Simple Method

Problems needed to solve:

  1. How do we maintain the link state between each node and the others? 如
  2. How can one determine whether multiple points form a connected graph?

For the first one: we can maintain each node's connection set(including itself).

For the second one: After solving the first one, we can see:

  • the node itself includes every node in the connected graph(including itself).
  • and only connected to the nodes in the connected graph.

Take example 1 to explain:

  • Node 5's connected node is itself, so it is a connected graph.
  • Node 0's connected 0, 1, 2. Same as nodes 1, 2.
  • Nodes 3 and 4 also include themselves and each other.
C++
class Solution { public: int countCompleteComponents(int n, vector<vector<int>>& edges) { int ans = 0; vector<set<int>> m(n + 1, set<int>()); for (int i = 0; i < n; i++) { m[i].insert(i); } for (auto x : edges) { m[x[0]].insert(x[1]); m[x[1]].insert(x[0]); } map<set<int>, int> s; for (int i = 0; i < n; i++) { s[m[i]]++; } for (auto& [x, y] : s) { if (y == x.size()) { ans++; } } return ans; } };(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !