力扣|Q997找法官FindTheTownJudge
作者:互联网
Q997FindTheTownJudge
简介
小镇里有 n 个人,按从 1 到 n 的顺序编号。传言称,这些人中有一个暗地里是小镇法官。
如果小镇法官真的存在,那么:
小镇法官不会信任任何人。
每个人(除了小镇法官)都信任这位小镇法官。
只有一个人同时满足属性 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}}));
}
}
提交结果
标签:FindTheTownJudge,法官,Q997,int,力扣,小镇,new,trust,public 来源: https://www.cnblogs.com/mrystar/p/16581784.html