leetcode 997. 找到小镇的法官

126 阅读2分钟

[toc] leetcode 997. 找到小镇的法官.

题目描述

  1. 找到小镇的法官

小镇里有 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多平台发布