题目

类型:图
image.png

解题思路

令 m 为 trust 数组长度
对于每个 trust[i] = (a, b) 而言,看作是从 a 指向 b 的有向边。
遍历 trust,统计每个节点的「入度」和「出度」:若存在 a -> b,则 a 节点「出度」加一,b 节点「入度」加一。
最后遍历所有点,若存在「入度」数量为 n−1,且「出度」数量为 0 的节点即是法官。

代码

  1. class Solution {
  2. public int findJudge(int n, int[][] trust) {
  3. int[] in = new int[n + 1], out = new int[n + 1];
  4. for (int[] t : trust) {
  5. int a = t[0], b = t[1];
  6. in[b]++; out[a]++;
  7. }
  8. for (int i = 1; i <= n; i++) {
  9. if (in[i] == n - 1 && out[i] == 0) return i;
  10. }
  11. return -1;
  12. }
  13. }