剑指 Offer II 116省份数量
Posted qnbk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer II 116省份数量相关的知识,希望对你有一定的参考价值。
省份数量
题目描述:
解题方法:并查集
class UnionFindSet
public:
UnionFindSet(size_t n)
_ufs.resize(n, -1);
void Union(int x1, int x2)//x1和x2所在集合的合并
assert(x1 < _ufs.size());
assert(x2 < _ufs.size());
int root1 = FindRoot(x1);
int root2 = FindRoot(x2);
//如果本身在一个集合就不用合并,不在一个集合需要合并
if (root1 != root2)
//合并
_ufs[root1] += _ufs[root2];
_ufs[root2] = root1;
int FindRoot(int x)//查找x所在集合的根
//双亲表示法:每个位置都存的是双亲的下标,根节点存的是负值
assert(x < _ufs.size());
while (_ufs[x] > 0)
x = _ufs[x];
return x;
size_t SetSize()
size_t n = 0;
//有多少个集合
for(size_t i = 0;i <_ufs.size();i++)
if(_ufs[i] < 0)
//有多少个根就有多少个集合
n++;
return n;
private:
std::vector<int> _ufs;
;
class Solution
public:
int findCircleNum(vector<vector<int>>& isConnected)
UnionFindSet ufs(isConnected.size());
for(size_t i = 0;i < isConnected.size();i++)
for(size_t j = 0;j < isConnected.size();j++)
if(isConnected[i][j] == 1)
//是相连城市
ufs.Union(i,j);//i,j合并
return ufs.SetSize();
;
以上是关于剑指 Offer II 116省份数量的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode1074 / 560 / 1248 / 363 / 剑指 Offer 68 - II
剑指offer59 - II 至 剑指offer 64 题解