[toc] leetcode 997. 找到小镇的法官.
题目描述
- 找到小镇的法官
小镇里有 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
提示:
1 <= n <= 1000 0 <= trust.length <= 104 trust[i].length == 2 trust 中的所有trust[i] = [ai, bi] 互不相同 ai != bi 1 <= ai, bi <= n
解题思路
法1
方法1:哈希表
我们使用哈希表记录被信任的次数,当被信任的次数为总人数的n-1时该人就为法官
当一个人信任别人时他的信任次数降为-1,失去法官资格
- 时间复杂度(O(n))
- 空间复杂度(O(n))
执行结果
法1
func findJudge(n int, trust [][]int) int {
//参数判断
if len(trust)<n {
return -1
}
//key数字,value次数
m := make(map[int]int)
//被信任统计,信任=-1(失去法官资格)
for i := 0; i < len(trust); i++ {
m[trust[i][0]] = -1
m[trust[i][1]]++
}
//遍历map输出法官
for i, v := range m {
if v == n-1 {
return i
}
}
return -1
}
执行结果: 通过 显示详情 查看示例代码 添加备注
执行用时: 92 ms , 在所有 Go 提交中击败了 50.00% 的用户 内存消耗: 7 MB , 在所有 Go 提交中击败了 40.44% 的用户 通过测试用例: 92 / 92 炫耀一下:
本文由mdnice多平台发布