leetcode刷题记录:算法(八)并查集(Union find)

并查集(Union find):在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。我个人理解的人话就是:将相关的元素并到一个集合里,在这个过程中要先查这些元素是不是已经在集合中并查集分为三个部分把每个点所在集合初始化为其自身。通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为O(N)。查找元素所在的集合,即根节点。将两个元素所在的集合
摘要由CSDN通过智能技术生成

并查集(Union find):

  • 在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。

我个人理解的人话就是:
将相关的元素到一个集合里,在这个过程中要先这些元素是不是已经在集合中

并查集分为三个部分

  1. 把每个点所在集合初始化为其自身。通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为O(N)。
  2. 查找元素所在的集合,即根节点。
  3. 将两个元素所在的集合合并为一个集合。通常来说,合并之前,应先判断两个元素是否属于同一集合,这可用上面的“查找”操作实现。

值得注意的一点是,这里的根节点和普通意义上的根节点不同:一个元素的根节点可能是他自身。
比如一个集合(1,2,3,4),这个集合的根节点可能是集合中的任意一个数字,假设我们取1,那么1的根节点就是它自身。

并查集是一个比较套路化的算法,实际应用过程中只需要根据题目稍作修改。

第一道题是一道写过的题,之前用DFS写的,限制尝试用并查集。

200 岛屿数量
思路很简单:

  1. 遍历矩阵
  2. 如果一个元素等于1,那么就检查他周围的元素(上下左右)
  3. 如果周围的元素中某个值为1,那么就将这两个元素做并集
  4. 统计集合的个数
class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
    	# 获取行列数目
        row, col = len(grid), len(grid[0])
        # 初始化root
        root =[i for i in range(row*col)]
        # 这里采用一个思路解决计数问题:
        # 每发现一个1,则count+=1,每合并一个1,则count-=1
        # 这样一个集合合并后,count相当于只加了1,记录了根节点的数量
        # 那么最后count的数量,就是岛屿的数量
        count = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值