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;
    }
};
comments powered by Disqus