第五届字节跳动青训营后端基础班笔试编程题题解

222 阅读1分钟

后端基础班的编程第一题很明显是力扣原题:997. 找到小镇的法官

leetcode.cn/problems/fi…

思路

除了力扣官方的题解外,我们还能进一步优化如下(可能更适合小白):

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;
    }