ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode(24)并查集系列题目

2022-06-07 14:04:09  阅读:198  来源: 互联网

标签:24 return 查集 father num parents root1 leetcode root2


684. 冗余连接

  1. 最开始,每个人都是自己的爹。
    因为所有人名字都是自然数1,2,3,4。构建一个【爹们】数组,parents,就直接把第一位朋友1的爹放在index为1的位置,第二位朋友2的爹放在index为2的位置,排排站好
  2. 如果某个人的爹就是自己,那他就不可能再有别的爹了。
    所以,去parents找第n位朋友的爹,如果parents[x] == x,就说明这位朋友没有别的爹。
  3. 也就是说,如果parents[x] != x,它的爹是别人!!那我们就再去找那个人,看看那个人还有没有别的爹,一直找到根源为止(最高老爹)。
  4. 然后就是根据规则,数组里每一对儿,都开始相认。相认前,先分别找爹。如果两个人爹不一样,就让他们相认。这里比如让后面的人认前面的人为爹。
  5. 如果发现两人的爹是同一个人,说明他们本来就有一个爹了,都和这个爹相连接(即两个节点原本就是联通的),但是现在又要让他们加上一层连接,就多余了。于是答案就是这两个数。即返回导致形成环的一组边
class Solution:
    def findRedundantConnection(self, edges: List[List[int]]) -> List[int]:
        size = len(edges)
        father = list(range(size + 1))  # 注意+1

        def find(num):
            while father[num] != num:
                num = father[num]
            return num

        def union(num1, num2):
            root1 = find(num1)
            root2 = find(num2)
            if root1 == root2:
                return True
            else:
                father[root2] = root1
                return False
        for src, dst in edges:
            if union(src, dst):
                return [src, dst]

标签:24,return,查集,father,num,parents,root1,leetcode,root2
来源: https://www.cnblogs.com/ttyangY77/p/16351501.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有