问题:
在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。
如果小镇的法官真的存在,那么:
1.小镇的法官不相信任何人。
2.每个人(除了小镇法官外)都信任小镇的法官。
只有一个人同时满足属性 1 和属性 2 。
给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。
如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的标记。否则,返回 -1。
思路:
由题意可知:法官的入度为N-1,出度为0;
代码:
//执行用时 :4 ms, 在所有 Java 提交中击败了94.80%的用户
//内存消耗 :50.1 MB, 在所有 Java 提交中击败了99.57%的用户
class Solution {
public int findJudge(int N, int[][] trust) {
int[] degree1=new int[N];//出度
int[] degree2=new int[N];//入度
for(int[] index:trust){
degree1[index[0]-1]++;
degree2[index[1]-1]++;
}
for(int i=0;i<N;i++){
//法官的出度为0,入度为N-1
if(degree1[i]==0&°ree2[i]==N-1){
return i+1;
}
}
return -1;
}
}