leetcode刷题之并查集

学习链接: https://zhuanlan.zhihu.com/p/93647900

三个关键点:

1)初始化底层数组,一般是若干个孤立的点。

2)合并连通域

3)查找每个连通域的代表元素。

性能优化:

1)路径压缩

即将当前节点的父节点设置成代表元(递归设置成父节点的父节点)。

2)秩合并

将秩小的的元素的代表元合并到秩大的代表元。

题目:

684. 冗余连接

对无向图类型的树而言,N个节点有N-1条边。如果有N条边,则有一条边加进来的时候会形成环。如果一条边在合并之前属于两个不同的连通域,则不会形成环,否则将会形成环。

990. 等式方程的可满足性

相等的元素应该属于同一个连通域,不相等的关系应该属于不同的连通域。

1)初始时,26个字母构成并查集的基础数组。

2)先遍历所有的相等关系构建连通域,

3)再处理不相等的关系。

399. 除法求值

等式的两个操作数位于同一个连通域,满足传递性。 因此,如果查询的两个元素在同一个连通域则可以利用 dfs 求出其结果,否则就为-1.

1) 因为初始时不知道有多少不同的操作数,故采用 unordered_map 作为存储父节点的基础数组,并在构建基础数组的同时记录各个节点的边以及权重。

2)遍历所有的equations元素构建连通域

3)处理查询, 在同一个连通域的则可以利用dfs求出等式结果,否则为 -1 .

1202. 交换字符串中的元素

交换关系具有传递性,能够相互交换的字符组成连通域, 分别对同一个连通域中的元素排序, 然后将其放置在对应的位置即可。

1)基础数组的大小为字符串长度,图节点为下标值,根据pairs构建连通域。

2)根据连通图生成一个map. 代表元为key, 同一个连通域的节点为values.

3)  对values的元素进行的排序。

4)将排序后的元素放置到对应的位置。

1319. 连通网络的操作次数

操作次数比连通域的个数少1.

947. 移除最多的同行或同列石头

给定一个点(x,y)所有与横坐标为 x 和 纵坐标为 y 的点都属于同一个连通域。同一个连通域的点可以删除只剩下一个点。 因此最多删除的石头个数等于总石头的个数减去连通域的个数。

并查集的基数组中的元素为坐标值,对一个点(x,y) 横坐标 等于x或者纵坐标等于y的石头也处于该连通域。每个点能够将x轴上的点和y轴点合并成一个连通域, 但是我们需要区分横坐标和纵坐标, 可以通过让x+10001使得横坐标和纵坐标处于不同的表示区间。 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值