先簡單回顧一下,今天預計分析的題目: 997. Find the Town Judge
題目敘述:
測資的 Input/Output
n
個人 與 紀錄了信任關係的二維陣列 trust
若法官存在,則相信他者為 n - 1
人,而他相信者為 0
人
因此先用直接用迴圈掃過 trust
,紀錄每個人被相信與相信他人的數量
# 每個 Person 都紀錄會紀錄 [被別人相信的次數, 相信別人的次數]
person = [[0, 0] for i in range(n + 1)]
for i in trust:
# 取得一比信任關係 (a 信任 b)
a, b = i
# a 信任他人的數量 + 1
person[a][1] += 1
# b 被信任的數量 + 1
person[b][0] += 1
- 如圖,由於鎮民是由 1
開始編號,為了方便,我們開了 n + 1
長度的陣列用來記錄鎮民資料。
- 每個 person 的第零個欄位用來記錄被信任的次數,第一個欄位紀錄信任他人的次數。
for i in range(1, n + 1):
if person[i][1] == 0 and person[i][0] == n - 1:
# 若第 i 位鎮民相信 0 人,且被 n - 1 人相信,則第 i 位就是法官
return i
return -1
class Solution:
def findJudge(self, n: int, trust: List[List[int]]) -> int:
# [BeTrustedNum, TrustOtherNum]
person = [[0, 0] for i in range(n + 1)]
for i in trust:
a, b = i
# 有信任別人就加1
person[a][1] += 1
# 有被人信任就加1
person[b][0] += 1
for i in range(1, n + 1):
# 滿足不信任其他人 和 被全部的人信任,則為法官
if person[i][1] == 0 and person[i][0] == n - 1:
return i
return -1