并查集:主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:
- 合并(Union):把两个不相交的集合合并为一个集合。
- 查询(Find):查询两个元素是否在同一个集合中。
简单实现
下面例子以
typescript实现 主要实现四个方法
- size(): 集合元素个数
- find(): 查找属于哪个分组
- isConnect(): 是否属于同一个分组
- uion:(): 合并两个数据到同一个分组
数组法
class UionFind {
private list: number[];
constructor(num: number) {
this.list = [];
for (let i = 0; i < num; i++) {
this.list[i] = i;
}
}
size() : number {
return this.list.length;
}
find(id: number) : number {
return this.list[id];
}
isConnect(a:number,b:number): boolean {
return this.find(a) === this.find(b);
}
uion(a:number,b:number) {
const aVal = this.list[a];
const bVal = this.list[b];
//数组遍历, o(n)时间复杂度
for (let i = 0; i < this.list.length; i++) {
if (this.list[i] === aVal) {
this.list[i] === bVal;
}
}
}
}
因为在合并的时候需要比那里数组,会产生 o(n)时间复杂度