LeetCode 997: Find the Town Judge (In-degree / Out-degree Counting)
LeetCode 997GraphCountingToday we solve LeetCode 997 - Find the Town Judge.
Source: https://leetcode.com/problems/find-the-town-judge/
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 -1var 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;
};中文
统计信任边方向:法官必须不信任任何人,且被其他所有人信任。
用 indeg 和 outdeg 两个数组,最后找满足 indeg[i]==n-1 且 outdeg[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 -1var 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