# Leetcode 997. Find the town judge
## 紀錄入度(in_degree)和出度(out_degree)
題目給定如果小鎮上有法官存在,且法官不會相信任何人,並且小鎮所有人都會相信法官
所以如果要找到小鎮上的法官,可以使用圖論來解決
根據題意,如果小鎮上有法官,那麼法官的入度會是 n - 1 ,出度會則會是0 ,而其中 n 為小鎮上的所有人
所以只要記錄下小鎮裡面所有人的入度和出度後,逐一比對是否有相符合法官的入度,即 n - 1,出度為 0,則返回法官的數字,如果逐一比對到最後小鎮中沒有法官,則返回 -1
注意這裡面紀錄入度和出度的陣列是從0開始的,而小鎮上人們的順序是從1開始的,所以這邊選擇幫小鎮所有人的數字減一,以方便記錄到陣列中比對,當然也可以捨棄陣列中的第零個位置不用,如果是這樣子的話,在構造紀錄陣列的時候就會需要多增加一位,即 **[0] * n + 1**以符合小鎮上人們從一開始紀錄的數字下標,返回法官的時候也就不需要再加一了
```python=
class Solution:
def findJudge(self, n: int, trust: List[List[int]]) -> int:
in_degree = [0] * n
out_degree = [0] * n
for eg in trust:
in_degree[eg[1] - 1] += 1
out_degree[eg[0] - 1] += 1
for i in range(n):
if in_degree[i] == n - 1 and out_degree[i] == 0: # 如果有符合法官條件的入度和出度,即入度為 n - 1 和 出度為 0,返回法官數字
return i + 1
return -1
```