997. 找到小镇的法官
来源: LeetCode 997. 找到小镇的法官
题目描述
997. 找到小镇的法官
在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。
如果小镇的法官真的存在,那么:
小镇的法官不相信任何人。
每个人(除了小镇法官外)都信任小镇的法官。
只有一个人同时满足属性 1 和属性 2 。
给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。
如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的标记。否则,返回 -1。
思路分析
寻找出度为0,入度为N-1的点
统计就可以了
代码
class Solution {
public:
int findJudge(int N, vector<vector<int>>& trust) {
vector<pair<int, int>> degree(N+1, make_pair(0,0));
int cnt = 0, res;
for(auto& a: trust){
degree[a[1]].first++;
degree[a[0]].second++;
}
for(int i=1; i<degree.size(); ++i){
auto v = degree[i];
if(v.first == N-1 && v.second == 0) {
++cnt;
res = i;
}
}
return cnt == 1 ? res : -1;
}
};
算法分析
- 时间复杂度:O(e+v)
- 空间复杂度:O(v)