Hello
In this article I will present you my Python3 solution for the following problem which I found on LeetCode: find-the-town-judge.
Note: The solution is on the second page, so you won’t get spoiled if you want to attempt to solve the problem by yourself. Have fun!
from collections import defaultdict
from typing import List
"""
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.
"""
class Solution:
def _filterForJudge(self, N, trust_dict):
no_trustees = None
for i in range(1, N + 1):
person_trusted = trust_dict.get(i, set())
if len(person_trusted) == 0:
if no_trustees is None:
no_trustees = i
else:
return None
return no_trustees
def findJudge(self, N: int, trust: List[List[int]]) -> int:
trust_dict = defaultdict(set)
for i in trust:
trust_dict[i[0]].add(i[1])
# The town judge trusts nobody.
no_trustee = self._filterForJudge(N, trust_dict)
if no_trustee:
# Everybody trusts the town judge.
people_who_trust = 0
for p in trust_dict.items():
# Check if the person trusts the town judge.
if no_trustee in p[1]:
people_who_trust += 1
if people_who_trust == N-1:
return no_trustee
return -1
if __name__ == '__main__':
s = Solution()
print(s.findJudge(2, [[1,2]]))
print(s.findJudge(3, [[1,3],[2,3]]))
print(s.findJudge(3, [[1,3],[2,3],[3,1]]))
print(s.findJudge(3, [[1,2],[2,3]]))
print(s.findJudge(4, [[1,3],[1,4],[2,3],[2,4],[4,3]]))
Thanks for reading!