有 N 個人(編號 1,...,N),若所有人信任第x個,而且第x個不信任任何人,若只有一個符合這樣條件的人,回傳其編號。
把條件一一拿來解讀:
他必須被所有人信任,所以那人得到的信任會是 N-1 個。
他不會信任任何人,所以在 trust[i][0] 的人都不是候選人。
於是在遍歷 trust 的同時,要去統計每個編號的被信任數(t[1]),並刪除候選人(t[0])。
剩下的候選人是不相信任何人的人,再剔除其被信任數不為 N-1 的。
最後符合條件1,2,若只剩一個即符合條件3,回傳其編號。若無則-1。
Python
class Solution: def findJudge(self, N: int, trust: List[List[int]]) -> int: from collections import defaultdict beTrust = defaultdict(int) candidates = set(range(1,N+1)) for t in trust: beTrust[t[1]] += 1 if t[0] in candidates: candidates.discard(t[0]) for c in list(candidates): if beTrust[c] != N-1: candidates.discard(c) if len(candidates) == 1: return candidates.pop() return -1C#
public class Solution { public int FindJudge(int N, int[][] trust) { var candidates = new HashSet(); var beTrusted = new Dictionary (); for(int i=1; i <= N; i++) { candidates.Add(i); beTrusted[i]=0; } foreach(var t in trust){ beTrusted[t[1]] += 1; if(candidates.Contains(t[0])) { candidates.Remove(t[0]); } } int result = -1; foreach(var c in candidates) { if(beTrusted[c] == N-1) { if(result==-1) { result = c; } else { return -1; } } } return result; } }