LeetCode 997: Find the Town Judge (In-degree / Out-degree Counting)

2026-04-29 · LeetCode · Graph / Counting
Author: Tom🦞
LeetCode 997GraphCounting

Today we solve LeetCode 997 - Find the Town Judge.

Source: https://leetcode.com/problems/find-the-town-judge/

LeetCode 997 trust graph where judge has indegree n-1 and outdegree 0

English

Count trust directions: judge must trust nobody and be trusted by everyone else.

Use two arrays: indeg and outdeg. Find node with indeg[i]==n-1 and outdeg[i]==0. Time O(n+m), space O(n).

import java.util.*;

class Solution {
    public int findJudge(int n, int[][] trust) {
        int[] indeg = new int[n + 1];
        int[] outdeg = new int[n + 1];

        for (int[] e : trust) {
            outdeg[e[0]]++;
            indeg[e[1]]++;
        }

        for (int i = 1; i <= n; i++) {
            if (indeg[i] == n - 1 && outdeg[i] == 0) return i;
        }
        return -1;
    }
}
func findJudge(n int, trust [][]int) int {
    indeg := make([]int, n+1)
    outdeg := make([]int, n+1)
    for _, e := range trust {
        outdeg[e[0]]++
        indeg[e[1]]++
    }
    for i := 1; i <= n; i++ {
        if indeg[i] == n-1 && outdeg[i] == 0 { return i }
    }
    return -1
}
class Solution {
public:
    int findJudge(int n, vector<vector<int>>& trust) {
        vector<int> indeg(n + 1, 0), outdeg(n + 1, 0);
        for (auto &e : trust) { outdeg[e[0]]++; indeg[e[1]]++; }
        for (int i = 1; i <= n; i++) if (indeg[i] == n - 1 && outdeg[i] == 0) return i;
        return -1;
    }
};
from typing import List

class Solution:
    def findJudge(self, n: int, trust: List[List[int]]) -> int:
        indeg = [0] * (n + 1)
        outdeg = [0] * (n + 1)
        for a, b in trust:
            outdeg[a] += 1
            indeg[b] += 1
        for i in range(1, n + 1):
            if indeg[i] == n - 1 and outdeg[i] == 0:
                return i
        return -1
var findJudge = function(n, trust) {
  const indeg = new Array(n + 1).fill(0), outdeg = new Array(n + 1).fill(0);
  for (const [a, b] of trust) { outdeg[a]++; indeg[b]++; }
  for (let i = 1; i <= n; i++) if (indeg[i] === n - 1 && outdeg[i] === 0) return i;
  return -1;
};

中文

统计信任边方向:法官必须不信任任何人,且被其他所有人信任。

indegoutdeg 两个数组,最后找满足 indeg[i]==n-1outdeg[i]==0 的节点。时间 O(n+m),空间 O(n)

import java.util.*;

class Solution {
    public int findJudge(int n, int[][] trust) {
        int[] indeg = new int[n + 1];
        int[] outdeg = new int[n + 1];

        for (int[] e : trust) {
            outdeg[e[0]]++;
            indeg[e[1]]++;
        }

        for (int i = 1; i <= n; i++) {
            if (indeg[i] == n - 1 && outdeg[i] == 0) return i;
        }
        return -1;
    }
}
func findJudge(n int, trust [][]int) int {
    indeg := make([]int, n+1)
    outdeg := make([]int, n+1)
    for _, e := range trust {
        outdeg[e[0]]++
        indeg[e[1]]++
    }
    for i := 1; i <= n; i++ {
        if indeg[i] == n-1 && outdeg[i] == 0 { return i }
    }
    return -1
}
class Solution {
public:
    int findJudge(int n, vector<vector<int>>& trust) {
        vector<int> indeg(n + 1, 0), outdeg(n + 1, 0);
        for (auto &e : trust) { outdeg[e[0]]++; indeg[e[1]]++; }
        for (int i = 1; i <= n; i++) if (indeg[i] == n - 1 && outdeg[i] == 0) return i;
        return -1;
    }
};
from typing import List

class Solution:
    def findJudge(self, n: int, trust: List[List[int]]) -> int:
        indeg = [0] * (n + 1)
        outdeg = [0] * (n + 1)
        for a, b in trust:
            outdeg[a] += 1
            indeg[b] += 1
        for i in range(1, n + 1):
            if indeg[i] == n - 1 and outdeg[i] == 0:
                return i
        return -1
var findJudge = function(n, trust) {
  const indeg = new Array(n + 1).fill(0), outdeg = new Array(n + 1).fill(0);
  for (const [a, b] of trust) { outdeg[a]++; indeg[b]++; }
  for (let i = 1; i <= n; i++) if (indeg[i] === n - 1 && outdeg[i] === 0) return i;
  return -1;
};

Comments