并查集
并查集介绍:
一群小弟拜老大哥。老大哥(根节点)一样帮派一样。
并查集表达:
N个人的话,N长度的数组即可。每个数组元素对应的值是这个人的大哥。
find()操作是,找上一级的大哥。
union()操作是,老大哥拜大哥。
并查集初始化:
每个人先成自己的大哥。
并查集裸题:
裸题代码:
class Solution { public: int nums[205]; int findCircleNum(vector<vector<int> >& M) { for(int i=0;i<205;i++){ nums[i]=i; } for(int i=0;i<M.size();i++){ for(int j=0;j<M.size();j++){ if(M[i][j]==1) Union(i,j); } } int res = 0; for(int i=0;i<M.size();i++){ if(i==nums[i]) res++; } return res; } int find(int x){ return nums[x]==x?x:find(nums[x]); }; void Union(int x,int y){ int a = find(x); int b = find(y); nums[b]=a; } };
微信搜索桔子科研或者扫描二维码,第一时间获取编程有趣的知识和最新科研学术成果。