997. Find the Town Judge
1. Description
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:
- The town judge trusts nobody.
- Everybody (except for the town judge) trusts the town judge.
There is exactly one person that satisfies properties 1 and 2.
You are given an array trust where trust[i] = [$a_i$, $b_i$] representing that the person labeled $a_i$ trusts the person labeled $b_i$.
Return the label of the town judge if the town judge exists and can be identified, or return -1 otherwise.
2. Example
Example 1:
Input: n = 2, trust = [[1,2]]
Output: 2
Example 2:
Input: n = 3, trust = [[1,3],[2,3]]
Output: 3
Example 3:
Input: n = 3, trust = [[1,3],[2,3],[3,1]]
Output: -1
3. Constraints
- 1 <= n <= 1000
- 0 <= trust.length <= 104
- trust[i].length == 2
- All the pairs of trust are unique.
- $a_i$ != $b_i$
- 1 <= $a_i$, $b_i$ <= n
4. Solutions
Hash Table
Time complexity: O(n):
Space complexity: O(n)
class Solution {
public:
int findJudge(int n, vector<vector<int>> &trust) {
vector<int> trust_diff(n + 1);
for (int i = 0; i < trust.size(); ++i) {
++trust_diff[trust[i][0]];
--trust_diff[trust[i][1]];
}
for (int i = 1; i <= n; ++i) {
if (trust_diff[i] == -(n - 1)) {
return i;
}
}
return -1;
}
};