Friend Circles
https://leetcode.com/problems/friend-circles/description/
Thoughts
Code
/*
* @lc app=leetcode id=547 lang=cpp
*
* [547] Friend Circles
*/
// @lc code=start
class Solution {
public:
class UF {
public:
vector<int> parents;
int size;
UF(int N): parents(N), size(N) {
for (int i = 0; i < N; ++i) {
parents[i] = i;
}
}
void un(int x, int y) {
x = find(x);
y = find(y);
if (x != y) {
parents[x] = y;
--size;
}
}
int find(int x) {
while (x != parents[x]) {
x = parents[x];
parents[x] = parents[parents[x]];
}
return x;
}
};
int findCircleNum(vector<vector<int>>& M) {
const int N = M.size();
UF uf(N);
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
if (M[i][j] == 1) {
uf.un(i, j);
}
}
}
return uf.size;
}
};
// @lc code=end
Analysis
Last updated