- 题目:一个二维数组m*m,表示m个人的某两个人是否具有朋友关系,通过直接或间接联系,将人划分为不同的圈子,求最终圈子数
- 难度:Medium
- 思路:根据题意,这一题可以用Union-Find进行解题。
- 代码:
public class Solution {
public int findCircleNum(int[][] M) {
if(M == null || M.length == 0){
return 0;
}
int len = M.length;
int count = len;
int[] id = new int[len];
//初始化,将每一个人都划分为一个圈子
for(int i = 0; i < len; i++){
id[i] = i;
}
//合并
for(int i = 0; i < len; i++){
for(int j = 0; j < len; j++){
if(i != j){
if(id[i] != id[j]){
if(M[i][j] == 1){
int pid = id[i];//查找
int qid = id[j];
//这一层for循环用于更新小组编号
for(int k = 0; k < len; k++){
if(id[k] == pid){
id[k] = qid;
}
}
count--;
}
}
}
}
}
return count;
}
}
朋友圈分组算法
本文介绍了一个使用并查集(Union-Find)算法解决朋友圈分组问题的方法。该问题旨在将一个二维数组中表示的朋友关系通过直接或间接联系划分成不同的圈子,并计算最终的圈子数量。
1460

被折叠的 条评论
为什么被折叠?



