2023-01-23 Daily Challenge

Today I have done leetcode's January LeetCoding Challenge with cpp.

January LeetCoding Challenge 23

Description

Find the Town Judge

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:

  1. The town judge trusts nobody.
  2. Everybody (except for the town judge) trusts the town judge.
  3. There is exactly one person that satisfies properties 1 and 2.

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 = 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

 

Constraints:

  • 1 <= n <= 1000
  • 0 <= trust.length <= 104
  • trust[i].length == 2
  • All the pairs of trust are unique.
  • ai != bi
  • 1 <= ai, bi <= n

Solution

auto speedup = [](){
  cin.tie(nullptr);
  cout.tie(nullptr);
  ios::sync_with_stdio(false);
  return 0;
}();
class Solution {
public:
  int findJudge(int n, vector<vector<int>>& trust) {
    int outDegree[n + 1];
    int inDegree[n + 1];
    memset(inDegree, 0, sizeof(inDegree));
    memset(outDegree, 0, sizeof(outDegree));
    for(auto &t : trust) {
      outDegree[t[0]] += 1;
      inDegree[t[1]] += 1;
    }
    int answer = -1;
    for(int i = 1; i <= n; ++i) {
      if(inDegree[i] == n - 1 && !outDegree[i]) {
        if(answer != -1) return -1;
        answer = i;
      }
    }
    return answer;
  }
};

// Accepted
// 92/92 cases passed (136 ms)
// Your runtime beats 98.09 % of cpp submissions
// Your memory usage beats 97.72 % of cpp submissions (60.5 MB)