数组形式实现
时间复杂度:
- 合并:O(n)
- 查询:O(1)
type UnionFindSet struct {
set []int // 下标代表元素,值代表属于的集合,相同值代表属于同一个集合
}
func NewUnionFindSet(cap int) *UnionFindSet {
temp := UnionFindSet{
set: make([]int, cap),
}
for i := 0; i < cap; i++ {
temp.set[i] = i
}
return &temp
}
// Union 合并两个set,时间复杂度O(n)
func (u *UnionFindSet) Union(x, y int) {
xID := u.set[x]
yID := u.set[y]
if xID == yID {
return
}
for i := 0; i < len(u.set); i++ {
if u.set[i] == xID {
u.set[i] = yID
}
}
}
// Find 查看元素属于哪个集合
func (u *UnionFindSet) Find(x int) int {
return u.set[x]
}
// IsConnected 连通性判断,判断两个元素是否属于同一个集合
func (u *UnionFindSet) IsConnected(x, y int) bool {
return u.set[x] == u.set[y]
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。