后端基础班的编程第一题很明显是力扣原题:997. 找到小镇的法官
思路
除了力扣官方的题解外,我们还能进一步优化如下(可能更适合小白):
1.如果存在法官,那么所有人都会信任法官,再结合条件1,可以得出信任法官的人数为n-1。
2.如果不存在法官,那么也可能存在某些人被所有人信任,这个人的信任人数也为n-1,但是他也会信任别人。
3.以此来区分other和judge。假设每个人都有信任值,那么定义一个数组长度为n,用来存放n个人的信任值:
1)如果一个人信任了别人,那么将这个人的信任值-1
2)如果一个人被别人信任,那么这个人的信任值+1
当一个人被所有人信任,并且他没有信任其它人时,这个人的信任值就是n- 1,那么此人就是法官。
当一个人被所有人信任,但是他也信任了其他人时,这个人的信任值<n - 1。
代码
public int findJudge(int N, int[][] trust) {
int [] trusted = new int[N];
for (int [] arr : trust){
trusted[arr[0]-1]--;
trusted[arr[1]-1]++;
}
for (int i=0;i<N;i++){
if (trusted[i]==N-1){
return i+1;
}
}
return -1;
}