并查集与常见面试题总结

简介

参考链接
并查集是一种树形的数据结构,用于处理不相交集合的合并和查询问题。在判断连通图个数、朋友圈个数等有重要应用。

并查集主要涉及三个基本操作:

  • makeSet(n):初始化一个独立的集合,开始时每个元素的最高祖先为自身 parent[x]=x;
  • findSet(x):寻找x所在集合的最高祖先,通过递归的方式进行查询,并且在查询时进行路径压缩。例如:开始有一个集合中1->2->3->4这种关系,当执行findSet(1)时的步骤依次是findSet(1) = findSet(2) = findSet(3) = findSet(4) = 4,一遍执行完成后,1,2,3元素的祖先节点都指向4;
  • unionSet(x,y):将元素x和元素y所在的集合进行合并,如果x,y在一个集合中就不用合并了,如果不在一个集合中,只需要将x元素的祖先指向y元素的祖先即可。例如两个集合1->2,3->4,如果将两个集合合并则只需2->4即可。
    通过上面三个函数即可将所有有关系的节点连接在一起。下面是简单的代码实现。
// 并查集简单实现
import java.util.*;
public class UFSet {
   
    // 保存祖先节点
    int[] parent;

    public UFSet(int n){
   
        parent = new int[n+1];
    }
    // 初始化,每个元素是一个独立子集,祖先是自己
    public void makeSet(int n ){
   
        for(int i = 1; i <= n; i++){
   
            parent[i] = i;
        }
    }
    // 递归的方式找到x的祖先节点
    public int findSet(int x){
   
        if(parent[x] == x){
   
            return x;
        }
        parent
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值