⛅(day11)
🖍题目:
小镇里有 n
个人,按从 1
到 n
的顺序编号。传言称,这些人中有一个暗地里是小镇法官👨⚖️。
如果小镇法官真的存在,那么:
- 小镇法官不会信任任何人。
- 每个人(除了小镇法官)都信任这位小镇法官。
- 只有一个人同时满足属性 1 和属性 2 。
给你一个数组 trust(trust
中的所有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❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄