python数字合并提高_python-给定相关数字列表,合并相关列表以创...

您可以为此使用Unionfind algorithm.首先,我们使用字典从这些对中创建一棵树:

leaders = collections.defaultdict(lambda: None)

现在,我们使用两个函数(union和find)填充该树:

def find(x):

l = leaders[x]

if l is not None:

l = find(l)

leaders[x] = l

return l

return x

def union(x, y):

lx, ly = find(x), find(y)

if lx != ly:

leaders[lx] = ly

只需遍历所有对,然后将它们放入树中即可.

for a, b in [(1,2),(3,4),(5,6),(3,7),(5,7)]:

union(a, b)

然后看起来像这样:{1:2,2:None,3:4,4,:7,5:6,6,6:7,7:None}

最后,我们将数字按各自的“领导者”分组,即find返回的内容:

groups = collections.defaultdict(set)

for x in leaders:

groups[find(x)].add(x)

现在,groups.values()为[set([1,2]),set([3,4,5,6,7])]

复杂度应约为O(nlogn).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值