题目要求
在一个小镇上,有 n 个从 1 到 n 的人。有传言说其中有一个人暗地里是小镇法官。
如果镇法官存在,那么
1. 小镇法官不信任任何人。
2. 每个人(除了小镇法官)都信任小镇法官。
3. 正好有一个人满足属性 1 和 2。
给你一个数组 trust,其中 trust[i] = [ai,bi] 表示标有 ai 的人信任标有 bi 的人。如果 trust 数组中不存在信任关系,那么这种信任关系就不存在。
如果小镇法官存在且可以识别,则返回小镇法官的标签,否则返回-1。
Example 1:
Input: n = 2, trust = [[1,2]] Output: 2
Example 2:
Input: n = 3, trust = [[1,3],[2,3]] Output: 3
Example 3:
Input: n = 3, trust = [[1,3],[2,3],[3,1]] Output: -1
思路
如果存在法官那么一定意味着有一个人不信任任何人,也就是他不会出现在trust[i]中的a[i]位置上即可,其次他会在b[i]的位置上出现n-2次。那么寻找元素是否出现和重复出现之类的问题,我们首先想到哈希表。
class Solution {
public:
int findJudge(int n, vector<vector<int>>& trust) {
map<int, int> trustCount;
map<int, int> givenTrust;
for (const auto& t : trust) {
trustCount[t[1]]++;
givenTrust[t[0]] = 1;
}
for (int i = 1; i <= n; ++i) {
if (givenTrust[i] == 0 && trustCount[i] == n-1) {
return i;
}
}
return -1;
}
};