# 997. Find the Town Judge

**<font color=red>难度: Easy</font>**

## 刷题内容

> 原题连接

* https://leetcode.com/problems/find-the-town-judge/

> 内容描述

```
In a town, there are N people labelled 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 trust, an array of pairs trust[i] = [a, b] representing that the person labelled a trusts the person labelled b.

If the town judge exists and can be identified, return the label of the town judge.  Otherwise, return -1.

 

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
Example 4:

Input: N = 3, trust = [[1,2],[2,3]]
Output: -1
Example 5:

Input: N = 4, trust = [[1,3],[1,4],[2,3],[2,4],[4,3]]
Output: 3
 

Note:

1 <= N <= 1000
trust.length <= 10000
trust[i] are all different
trust[i][0] != trust[i][1]
1 <= trust[i][0], trust[i][1] <= N
```

## 解题方案

> 思路 1
******- 时间复杂度: O(N^2)******- 空间复杂度: O(N)******


最重要的就是两点:
1. 所有人都相信  town judge
2. town judge 不相信任何人


```python
class Solution:
    def findJudge(self, N: int, trust: List[List[int]]) -> int:
        lookup = collections.defaultdict(set)
        for t in trust:
            lookup[t[0]].add(t[1])
        res = []
        for i in range(1, N+1):
            if len(lookup[i]) != 0:
                continue
            flag = False
            for j in range(1, i):
                if i not in lookup[j]:
                    flag = True
            for j in range(i+1, N+1):
                if i not in lookup[j]:
                    flag = True
            if not flag:
                res.append(i)
        return res[0] if len(res) == 1 else -1
```



> 思路 1
******- 时间复杂度: O(N)******- 空间复杂度: O(N)******


更好的想法，direct graph，被trust和trust别人考虑为入度in与出度out，哪个人出度为N-1，入度为0的话就是town judge

照抄[[Java/C++/Python] Directed Graph](https://leetcode.com/problems/find-the-town-judge/discuss/242938/JavaC%2B%2BPython-Directed-Graph)

```python
class Solution:
    def findJudge(self, N: int, trust: List[List[int]]) -> int:
        count = [0] * (N + 1)
        for i, j in trust:
            count[i] -= 1
            count[j] += 1
        for i in range(1, N + 1):
            if count[i] == N - 1:
                return i
        return -1
```





































