LeetCode 997 找到小镇的法官

205 阅读1分钟
  • 入度为0
  • 出度为n - 1
class Solution {
public:
    int findJudge(int n, vector<vector<int>>& trust) {
    vector<int> din(n + 1),  dout(n + 1);
    for(auto p : trust) {
        int a = p[0], b = p[1];
        din[b] ++;
        dout[a] ++;
    }

    int res = -1;
    for(int i = 1; i <= n; i ++) {
        if(!dout[i] && din[i] == n - 1) {
            if(res != -1) res = -1;
            res = i;
        }
    }
    return res;
    }
};
  • 统计入度和出度需要 O(m) 的时间,m 为边数;枚举每个人判断需要 O(n) 的时间,故总时间复杂度为 O(n+m)。
  • 需要额外两个数组记录每个点的入度和出度,故空间复杂度为 O(n)。