LeetCode刷题日记2021-12-19/997. 找到小镇的法官-有向图出入度

997. 找到小镇的法官

题目描述

在一个小镇里,按从 1nn 个人进行编号。传言称,这些人中有一个是小镇上的秘密法官。

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

  1. 小镇的法官不相信任何人。
  2. 每个人(除了小镇法官外)都信任小镇的法官。
  3. 只有一个人同时满足条件 1 和条件 2 。

给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示编号为 a 的人信任编号为 b 的人。

如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的编号。否则,返回 -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

示例 4:

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

示例 5:

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

提示:

  • 1 <= n <= 1000
  • 0 <= trust.length <= 104
  • trust[i].length == 2
  • trust[i] 互不相同
  • trust[i][0] != trust[i][1]
  • 1 <= trust[i][0], trust[i][1] <= n

题解思路

由题目可知 如果一个人是法官的话 则有以下条件

  • 所有人(除法官之外)都会信任法官 也就是有n-1个人指向法官
  • 法官任何人都不相信 也就是法官不会指向任何人

因此我们可以用有向图的出入度来计算这个人是不是法官

  • 出度:这个人是否信任别人
  • 入度:这个人是否被别人信任
  • 如果是法官的话 那么这个人的出度为0 入度为n-1

题解代码

class Solution:
	def findJudge(self, n: int, trust: List[List[int]]) -> int:
		#出度--------->这个人是否信任别人
		person=[0]*n
		#入度--------->这个人是否被人信任
		num=[0]*n
		for a in trust:
			person[a[0]-1]+=1
			num[a[1]-1]+=1
		for i in range(1,n+1):
			if person[i-1]==0 and num[i-1]==n-1:
				return i
		return -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值