文章目录
997. 找到小镇的法官
小镇里有 n
个人,按从 1
到 n
的顺序编号。传言称,这些人中有一个暗地里是小镇法官。
如果小镇法官真的存在,那么:
- 小镇法官不会信任任何人。
- 每个人(除了小镇法官)都信任这位小镇法官。
- 只有一个人同时满足
属性 1
和属性 2
。
给你一个数组 trust
,其中
t
r
u
s
t
[
i
]
=
[
a
i
,
b
i
]
trust[i] = [a_i, b_i]
trust[i]=[ai,bi] 表示编号为
a
i
a_i
ai 的人信任编号为
b
i
b_i
bi 的人。
如果小镇法官存在并且可以确定他的身份,请返回该法官的编号;否则,返回-1
。
示例 1:
输入:n = 2, trust = [[1,2]]
输出:2
示例 2:
输入:n = 3, trust = [[1,3],[2,3]]
输出:3
解释:1和2都信任3,但是3不信任任何人,所以3是法官
示例 3:
输入:n = 3, trust = [[1,3],[2,3],[3,1]]
输出:-1
解释:1,2,3都信任某个人,所以都不是法官,故没有法官
提示:
- 1 < = n < = 1000 1 <= n <= 1000 1<=n<=1000
- 0 < = t r u s t . l e n g t h < = 1 0 4 0 <= trust.length <= 10^4 0<=trust.length<=104
- t r u s t [ i ] . l e n g t h = = 2 trust[i].length == 2 trust[i].length==2
- t r u s t trust trust 中的所有 t r u s t [ i ] = [ a i , b i ] trust[i] = [a_i, b_i] trust[i]=[ai,bi] 互不相同
- a i ! = b i a_i != b_i ai!=bi
- 1 < = a i , b i < = n 1 <= a_i, b_i <= n 1<=ai,bi<=n
解题思路
- 找出被
n-1
个人信任的那个人,那个人可能是法官,因为他被其余所有人信任 - 这个人不信任其他任何人,则可确定确实是法官,否则不是法官
注意:只有一个人时,当前这个人就是法官,因为也符合不信任任何人
Go代码
func findJudge(n int, trust [][]int) int {
// 找出被n-1个人信任的那个人,那个人可能是法官,因为被其余所有人信任
// 这个人不信任其他任何人,则可确定确实是法官,否则不是法官
// 只有一个人时,当前这个人就是法官,因为也符合不信任任何人
if n== 1 {
return 1
}
m := make(map[int]int) // 每个人有多少人信任
for i := 0;i < len(trust);i++ {
m[trust[i][1]]++
}
// 找出有n-1个人信任的人
arr := make([]int,0)
for k,v := range m {
if v == n - 1 {
arr = append(arr,k)
}
}
// 题目表明法官只可能存在一个
if len(arr) != 1 {
return -1
}
// 法官不会信任其他任何人
for i := 0;i < len(trust);i++ {
if trust[i][0] == arr[0] {
return -1
}
}
return arr[0]
}