其他分享
首页 > 其他分享> > 力扣|Q997找法官FindTheTownJudge

力扣|Q997找法官FindTheTownJudge

作者:互联网

Q997FindTheTownJudge

简介

小镇里有 n 个人,按从 1n 的顺序编号。传言称,这些人中有一个暗地里是小镇法官。

如果小镇法官真的存在,那么:

小镇法官不会信任任何人。
每个人(除了小镇法官)都信任这位小镇法官。
只有一个人同时满足属性 1 和属性 2 。
给你一个数组 trust ,其中 trust[i] = [ai, bi] 表示编号为 ai 的人信任编号为 bi 的人。

如果小镇法官存在并且可以确定他的身份,请返回该法官的编号;否则,返回 -1

示例 1:

输入:n = 2, trust = [ [1, 2] ]
输出:2

示例 2:

输入:n = 3, trust = [ [1, 3], [2, 3] ]
输出:3

示例 3:

输入:n = 3, trust = [ [1, 3], [2, 3], [3, 1] ]
输出:-1

https://leetcode.cn/problems/find-the-town-judge

解题思路

通过图的入度和出度来解题,根据题意,a信任b,则a的出度增加1,b的入度增加1。这样只有当一个人满足出度为0(不信任任何人),入度为n-1(除法官都信任法官)的时候,这个人就是法官。

代码

public class Q997FindTheTownJudge {

    public int findJudge(int n, int[][] trust) {

        int[] inEdges = new int[n+1];
        int[] outEdges = new int[n+1];
        for (int[] ints : trust) {
            outEdges[ints[0]]++;
            inEdges[ints[1]]++;
        }

        for (int i = 1; i < n+1; i++) {
            if (inEdges[i] == n-1 && outEdges[i] == 0){
                return i;
            }
        }
        return -1;
    }
}

测试

public class Q997FindTheTownJudgeTest {

    private Q997FindTheTownJudge q = new Q997FindTheTownJudge();

    @Test
    public void test1() {
        assertEquals(2, q.findJudge(2, new int[][]{{1,2}}));
    }

    @Test
    public void test2() {
        assertEquals(3, q.findJudge(3, new int[][]{{1,3},{2,3}}));
    }

    @Test
    public void test3() {
        assertEquals(-1, q.findJudge(3, new int[][]{{1,3},{2,3},{3,1}}));
    }
}

提交结果

图 1

标签:FindTheTownJudge,法官,Q997,int,力扣,小镇,new,trust,public
来源: https://www.cnblogs.com/mrystar/p/16581784.html