Leetcode Summary: Union Find

本文深入解析了AccountsMerge算法,该算法通过并查集处理账户信息合并的问题,实现了账户下所有邮箱地址的有效整合。文章详细介绍了并查集的find和union操作,并展示了如何利用这些操作来解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

721. Accounts Merge

class Solution(object):
    def accountsMerge(self, accounts):
        def find(a):
            if ds[a] < 0:
                return a
            ds[a] = find(ds[a])
            return ds[a]
        
        def union(a, b):
            a, b = find(a), find(b)
            if a != b:
                if ds[a] < ds[b]:
                    ds[a] += ds[b]
                    ds[b] = a
                else:
                    ds[b] += ds[a]
                    ds[a] = b

        c, ds, email_to_id, id_to_name = 0, [], {}, {}
        for account in accounts:
            for email in account[1:]:
                if email not in email_to_id:
                    email_to_id[email] = c
                    id_to_name[c] = account[0]
                    ds.append(-1)
                    c += 1
                union(email_to_id[account[1]], email_to_id[email])        
        res = {}
        for email, id in email_to_id.items():
            master = find(id)
            res[master] = res.get(master, []) + [email]
        return [[id_to_name[id]] + sorted(emails) for id, emails in res.items()]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值