import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。
* <p>
* 如果小镇的法官真的存在,那么:
* <p>
* 小镇的法官不相信任何人。
* 每个人(除了小镇法官外)都信任小镇的法官。
* 只有一个人同时满足属性 1 和属性 2 。
* 给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。
* <p>
* 如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的标记。否则,返回 -1。
* <p>
* 示例 1:
* <p>
* 输入:N = 2, trust = [[1,2]]
* 输出:2
* 示例 2:
* <p>
* 输入:N = 3, trust = [[1,3],[2,3]]
* 输出:3
* 示例 3:
* <p>
* 输入:N = 3, trust = [[1,3],[2,3],[3,1]]
* 输出:-1
* 示例 4:
* <p>
* 输入:N = 3, trust = [[1,2],[2,3]]
* 输出:-1
* 示例 5:
* <p>
* 输入:N = 4, trust = [[1,3],[1,4],[2,3],[2,4],[4,3]]
* 输出:3
* <p>
* https://leetcode-cn.com/problems/find-the-town-judge/
*/
class Solution {
/**
* 出度为0,并且入度为N-1
*
* @param N
* @param trust
* @return
*/
public int findJudge(int N, int[][] trust) {
int[] outDegress = new int[N + 1];
int[] inDegress = new int[N + 1];
for (int i = 0; i < trust.length; i++) {
int first = trust[i][0];
int second = trust[i][1];
outDegress[first]++;
inDegress[second]++;
}
for (int i = 1; i <= N; i++) {
if (outDegress[i] == 0 && inDegress[i] == N - 1) {
return i;
}
}
return -1;
}
}
public class MainClass {
public static int[] stringToIntegerArray(String input) {
input = input.trim();
input = input.substring(1, input.length() - 1);
if (input.length() == 0) {
return new int[0];
}
String[] parts = input.split(",");
int[] output = new int[parts.length];
for (int index = 0; index < parts.length; index++) {
String part = parts[index].trim();
output[index] = Integer.parseInt(part);
}
return output;
}
public static int[][] stringToInt2dArray(String input) {
JsonArray jsonArray = JsonArray.readFrom(input);
if (jsonArray.size() == 0) {
return new int[0][0];
}
int[][] arr = new int[jsonArray.size()][];
for (int i = 0; i < arr.length; i++) {
JsonArray cols = jsonArray.get(i).asArray();
arr[i] = stringToIntegerArray(cols.toString());
}
return arr;
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
int N = Integer.parseInt(line);
line = in.readLine();
int[][] trust = stringToInt2dArray(line);
int ret = new Solution().findJudge(N, trust);
String out = String.valueOf(ret);
System.out.print(out);
}
}
}
还没有评论,来说两句吧...