Union-find counter
Time O(E α(n)) Space O(n)groups = n; for each edge, if union succeeds, groups--.
class Solution {
private int[] parent;
public int countComponents(int n, int[][] edges) {
parent = new int[n];
for (int i = 0; i < n; i++) parent[i] = i;
int groups = n;
for (int[] e : edges) {
int a = find(e[0]), b = find(e[1]);
if (a != b) { parent[a] = b; groups--; }
}
return groups;
}
private int find(int x) {
while (parent[x] != x) { parent[x] = parent[parent[x]]; x = parent[x]; }
return x;
}
}Verdict: No adjacency list needed.