In a town, there are n people labeled from 1 to n. There is a rumor that one of these people is secretly the town judge.
If the town judge exists, then:
You are given an array trust where trust[i] = [ai, bi] representing that the person labeled ai trusts the person labeled bi.
Return the label of the town judge if the town judge exists and can be identified, or return -1 otherwise.
Example 1:
Input: n = 4, trust = [[1,3],[4,3],[2,3]]
Output: 3Example 2:
Input: n = 3, trust = [[1,3],[2,3],[3,1],[3,2]]
Output: -1Constraints:
1 <= n <= 10000 <= trust.length <= 10,000trust[i].length == 2trust are unique.trust[i][0] != trust[i][1]1 <= trust[i][0], trust[i][1] <= nBefore attempting this problem, you should be comfortable with:
The town judge is trusted by everyone else but trusts nobody. In graph terms, if we model trust relationships as directed edges, the judge has an indegree of n - 1 (everyone trusts them) and an outdegree of 0 (they trust nobody). We simply count incoming and outgoing edges for each person and find the one matching these criteria.
incoming and outgoing, both of size n + 1.[a, b]:outgoing[a] (person a trusts someone).incoming[b] (person b is trusted by someone).1 to n:outgoing[i] == 0 and incoming[i] == n - 1, return i.-1 if no judge found.class Solution:
def findJudge(self, n: int, trust: List[List[int]]) -> int:
incoming = defaultdict(int)
outgoing = defaultdict(int)
for src, dst in trust:
outgoing[src] += 1
incoming[dst] += 1
for i in range(1, n + 1):
if outgoing[i] == 0 and incoming[i] == n - 1:
return i
return -1Where is the number of vertices and is the number of edges.
We can combine the two arrays into one by using the difference: delta[i] = incoming[i] - outgoing[i]. The judge has n - 1 people trusting them and trusts 0 people, so their delta equals (n - 1) - 0 = n - 1. Anyone who trusts at least one person will have a delta less than n - 1.
delta of size n + 1.[a, b]:delta[a] (person a trusts someone, reducing their score).delta[b] (person b is trusted, increasing their score).1 to n:delta[i] == n - 1, return i.-1 if no judge found.Where is the number of vertices and is the number of edges.
The town judge must be trusted by everyone (indegree = n-1) AND trust nobody (outdegree = 0). A common mistake is only checking that someone is trusted by n-1 people, which would incorrectly identify a person who also trusts others.
People are labeled from 1 to n, not 0 to n-1. When using arrays indexed from 0, forgetting to iterate from 1 to n (inclusive) or incorrectly accessing array indices can cause out-of-bounds errors or missed candidates.