0
点赞
收藏
分享

微信扫一扫

Python每日一练-----找到小镇的法官(有向图)

(day11)

🖍题目:

小镇里有 n 个人,按从 1n 的顺序编号。传言称,这些人中有一个暗地里是小镇法官👨‍⚖️。

如果小镇法官真的存在,那么:

  1. 小镇法官不会信任任何人。
  2. 每个人(除了小镇法官)都信任这位小镇法官。
  3. 只有一个人同时满足属性 1 和属性 2 。

给你一个数组 trusttrust 中的所有trust[i] = [ai, bi] 互不相同,trust[i].length ==2 ,其中 trust[i] = [ai, bi] 表示编号为 ai 的人信任编号为 bi 的人。

如果小镇法官存在并且可以确定他的身份,请返回该法官的编号;否则,返回 -1 。

🌠示例 1:

🌠示例 2: 

🌠示例 3: 

题目分析:

所法官就是获得所有人的信任,而他不信任其他人的人。

解题思路:

这道题比较适合使用有向图解题。什么是有向图?

先来简单了解有向图

这是有向图的一种简单形式 。

在有向图中,一个节点(a,b,c,d)的入度是指向该节点的边的数量;而一个节点的出度是从该节点出发的边的数量。

现在将箭头看作信任。如a----->b,说明a信任b。

由题目可知

我们可以遍历每个节点的入度和出度,如果找到一个符合条件的节点,因为只有一个法官,我们可以直接返回结果;如果不存在符合条件的点,则返回 -1。

代码实现

from collections import Counter


def findJudge(n, trust):
        into = Counter(y for _, y in trust)
        out = Counter(x for x, _ in trust)
        return next((i for i in range(1, n + 1) if into[i] == n - 1 and out[i] == 0), -1)

代码注释

❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄

 

举报

相关推荐

0 条评论