leetcode-684.冗余连接

这是我第一次用并查集相关的数据结构。
该题显然是要一次遍历给定数组,然后不断查看边的两个节点是否已经在一个集合里,是典型的并查集应用题。
在一开始,每个点都是一个独立的集合。每次迭代一条边,都会把两个集合合并起来,且是有方向地合并,这样才能在不断找parent的过程中,以唯一的root作为该集合的hash值。
并查集要维护这个集合,需要find和union两个函数。find,用于找到当前节点所在集合的唯一root,就是一直找它的parent。union,就是把两个节点所在的两个集合的两个root合一起,即把一个root本来指向自己的指向另一个root。

class Solution:
    def findRedundantConnection(self, edges: List[List[int]]) -> List[int]:
        n = len(edges)
        parent = list(range(n + 1))

        def find(index: int) -> int:
            if parent[index] != index:
                parent[index] = find(parent[index])
            return parent[index]

        def union(index1: int, index2: int):
            parent[find(index1)] = find(index2)

        for node1, node2 in edges:
            if find(node1) != find(node2):
                union(node1, node2)
            else:
                return [node1, node2]

        return []
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值