每日一题python90:找到小镇的法官

题目:小镇里有 n 个人,按从 1 到 n 的顺序编号。传言称,这些人中有一个暗地里是小镇法官。如果小镇法官真的存在,那么:小镇法官不会信任任何人。每个人(除了小镇法官)都信任这位小镇法官。只有一个人同时满足属性 1 和属性 2 。给你一个数组 trust ,其中 trust[i] = [ai, bi] 表示编号为 ai 的人信任编号为 bi 的人。如果小镇法官存在并且可以确定他的身份,请返回该法官的编号;否则,返回 -1 。

示例 1:

输入:n = 2, trust = [[1,2]] 输出:2
示例 2:

输入:n = 3, trust = [[1,3],[2,3]] 输出:3
示例 3:

输入:n = 3, trust = [[1,3],[2,3],[3,1]] 输出:-1

程序说明:
方法一: 因为小镇法官不相信任何人,所以小镇法官只可能在[ai,bi]的bi的位置,因此首先排除掉a列表里面等于ai的元素,留下的便是小镇法官,接着判断bi为小镇法官(即信任法官的)有几个,最后若个数等于n-1即可返回法官。

方法二:使用了有向图的思想,在法官存在的情况下,因为法官不相信任何人,因此法官这个节点的入度是 n-1,出度是 0。我们可以遍历每个节点的入度和出度,如果找到一个符合条件的节点,由于题目保证只有一个法官,我们可以直接返回结果;如果不存在符合条件的点,则返回 -1。

全部代码:

class Solution:
    def findJudge(self, n: int, trust: List[List[int]]) -> int:
        a=[]
        for i in range(n):
            a.append(i+1)
        for i in range(len(trust)):
            if trust[i][0] in a:
                a.remove(trust[i][0])
        for i in a:
            b=0
            for j in trust:
                if j[1]==i:
                    b+=1
            if b ==n-1:
                return i
        return -1

方法二:

class Solution:
    def findJudge(self, n: int, trust: List[List[int]]) -> int:
        inDegrees = Counter(y for _, y in trust)
        outDegrees = Counter(x for x, _ in trust)
        return next((i for i in range(1, n + 1) if inDegrees[i] == n - 1 and outDegrees[i] == 0), -1)

来源:力扣(LeetCode)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值