第四题并查集 这样写对吗,没来得及提交 class UnionFind(object): def __init__(self): self.uf = [i for i in range(100001)] def find(self, p): if self.uf[p] != p: return self.find(self.uf[p]) else: return p def union(self, p, q): proot = self.find(p) qroot = self.find(q) if proot == qroot: return elif proot<qroot: self.uf[q] = proot else: self.uf[p] = qroot uf = UnionFind() half1 = nums[n//2:] half2 = nums[:n//2] for n1,n2 in zip(half1,half2): if n1!=n2: uf.union(n1,n2) nums_set = {} for i in range(len(uf.uf)): if uf.uf[i] != i: root = uf.find(i) if root in nums_set: nums_set[root].append(i) else: nums_set[root] = [i] res = 0 for k,v in nums_set.items(): res += len(v) print(res)

相关推荐

牛客热帖

牛客网
牛客企业服务