---
# System prepended metadata

title: Leetcode 997. Find the town judge

---

# 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
```
