圖論應用: 尋找法官 Find the Town Judge_Leetcode #997

閱讀時間約 5 分鐘

題目敘述

題目會給定一個參數n代表人口總數,和對應的信任關係陣列trust,陣列元素都是pair,都以[a, b]的形式呈現,代表a信任b。

要求我們找出法官是誰,返回法官的ID?


成為法官的條件:

1.每個人(除了法官自己之外)都信任法官。

2.法官不信任別人。


題目的原文敘述


測試範例

Example 1:

Input: n = 2, trust = [[1,2]]
Output: 2
1信任2

Example 2:

Input: n = 3, trust = [[1,3],[2,3]]
Output: 3
1信任3
2信任3

Example 3:

Input: n = 3, trust = [[1,3],[2,3],[3,1]]
Output: -1
1信任3
2信任3
3信任2 (違反"法官不信任別人"的規則,3無法成為法官)

約束條件

Constraints:

  • 1 <= n <= 1000

人口總數介於1~1000之間

  • 0 <= trust.length <= 10^4

信任關係陣列長度介於0~一萬之間。

  • trust[i].length == 2

信任關係陣列元素以pair的方式呈現。

  • All the pairs of trust are unique.

所有信任關係都是獨一無二的,不會重複。

  • ai != bi

不會有自我指向邊(不會有[a, a],a信任a 這種輸入)

  • 1 <= ai, bi <= n

所有信任關係的ID都是合法範圍內1~n的數字。


演算法 圖論 + Degree判定

可以把整個問題轉換為圖論的Degree判定問題:


把每個村民視為一個節點,

村民a信任村民b代表節點a到結點b有一條指向邊。


題目說成為法官的條件:

1.每個人(除了法官自己之外)都信任法官。

2.法官不信任別人。


等價於圖論上的

  1. 每個節點(除了法官節點之外),都有一條指向邊指向法官節點。
  2. 法官節點沒有向外的邊(no out-going edge)。


因此,我們可以以知道,法官節點的淨輸入度(Net in-degee)

=總輸入度 - 總輸出度

= Total in degree - Total out degree

= (n-1) - 0

= n-1

就用這條關係式,去找出法官是誰。


這題剛好以前錄過教學影片,提供給讀者作為參考


程式碼 圖論 + Degree判定

class Solution:
def findJudge(self, n: int, trust: List[List[int]]) -> int:

# 0 is dummy cell
# key: person id
# value: total in degree - total out degree
net_in_degree = [ 0 for _ in range(n+1) ]

for person_a, person_b in trust:

# a trust b <=> indegree of b increment, inegree of a decrement
net_in_degree[person_b] += 1
net_in_degree[person_a] -= 1

# Town judge <=> net indegree = n-1
for p in range(1, n+1):
if net_in_degree[p] == (n-1):
return p

return -1

複雜度分析 圖論 + Degree判定

時間複雜度:

掃描每隔節點耗時O(n),掃描每個信任關係耗時O(t)。

當輸入是稠密圖時,可能會有很多信任關係(相當於有很多條邊),可能高達C(n,2) = O(n^2)

總共所需時間為O(n) + O(t) = 當輸入時是稠密圖時,可能高達O(n^2)


空間複雜度:

需要一個net_in_degree表格,計入每個節點的淨輸入度,所需空間為O(n)。


關鍵知識點

可以把整個問題轉換為圖論的Degree判定問題:


把每個村民視為一個節點,

村民a信任村民b代表節點a到結點b有一條指向邊。


題目說成為法官的條件:

1.每個人(除了法官自己之外)都信任法官。

2.法官不信任別人。


等價於圖論上的

  1. 每個節點(除了法官節點之外),都有一條指向邊指向法官節點。
  2. 法官節點沒有向外的邊(no out-going edge)。

Reference:

[1] Find the Town Judge - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 題目會給我們一個參數k 和 目標值n。 請問我們從1~9內挑k個相異的數字,使得他們的總和為n 的組合數有多少? 挑選時,每個數字必須相異,而且每個數字只能選一次。 題目的原文敘述 測試範例 Example 1: Input: k = 3, n = 7 Output: [
題目敘述 題目會給我們一個傳統手機的數字鍵盤 和一個數字鍵的輸入字串digits,要求我們列舉出所有輸入字串digits可能對應到的英文字母的排列。 例如輸入digits="23" 那對應到的英文字母排列就是"ad", "ae", "af", "bd", "be", "bf", "cd", "
題目敘述 題目會給我們一個4位數字的數字鎖,還有解鎖的密碼target,和陷阱數字deadends(假如遇到的會鎖會直接卡住,不能在撥動轉盤了)。 預設開始的狀態是0000,請問,最少要撥動轉盤幾次才能解鎖? 題目的原文敘述 測試範例 Example 1: Input: deaden
題目敘述 題目給定一個二維陣列maze代表迷宮的布局, 其中標記為"."的地方代表可通過,標記為"+"代表牆壁不可通過。 每次移動的時候,可以選擇往上、下、左、右移動一格。 請問從出發點entrace開始走的話,抵達迷宮出口最短距離的步數是多少? 如果無解的話,返回-1。 題目的原文敘述
題目敘述 給定一個正整數n,請找出最少用幾個完全平方數,可以讓他們的總和為n? 例如 n=12,最少用3個完全平方數就可讓他們的總和為n,因為12 = 4 + 4 + 4 題目的原文敘述 測試範例 Example 1: Input: n = 12 Output: 3 Explanat
題目敘述 圖目會給定我們一串已知變數作除法的值,以分子在前,分母在後的形式表達。 要求我們針對未知的變數除法作計算,以浮點數的形式返回答案;如果無解,返回-1.0。 題目的原文敘述 測試範例 Example 1: Input: equations = [["a","b"],["b",
題目敘述 題目會給我們一個參數k 和 目標值n。 請問我們從1~9內挑k個相異的數字,使得他們的總和為n 的組合數有多少? 挑選時,每個數字必須相異,而且每個數字只能選一次。 題目的原文敘述 測試範例 Example 1: Input: k = 3, n = 7 Output: [
題目敘述 題目會給我們一個傳統手機的數字鍵盤 和一個數字鍵的輸入字串digits,要求我們列舉出所有輸入字串digits可能對應到的英文字母的排列。 例如輸入digits="23" 那對應到的英文字母排列就是"ad", "ae", "af", "bd", "be", "bf", "cd", "
題目敘述 題目會給我們一個4位數字的數字鎖,還有解鎖的密碼target,和陷阱數字deadends(假如遇到的會鎖會直接卡住,不能在撥動轉盤了)。 預設開始的狀態是0000,請問,最少要撥動轉盤幾次才能解鎖? 題目的原文敘述 測試範例 Example 1: Input: deaden
題目敘述 題目給定一個二維陣列maze代表迷宮的布局, 其中標記為"."的地方代表可通過,標記為"+"代表牆壁不可通過。 每次移動的時候,可以選擇往上、下、左、右移動一格。 請問從出發點entrace開始走的話,抵達迷宮出口最短距離的步數是多少? 如果無解的話,返回-1。 題目的原文敘述
題目敘述 給定一個正整數n,請找出最少用幾個完全平方數,可以讓他們的總和為n? 例如 n=12,最少用3個完全平方數就可讓他們的總和為n,因為12 = 4 + 4 + 4 題目的原文敘述 測試範例 Example 1: Input: n = 12 Output: 3 Explanat
題目敘述 圖目會給定我們一串已知變數作除法的值,以分子在前,分母在後的形式表達。 要求我們針對未知的變數除法作計算,以浮點數的形式返回答案;如果無解,返回-1.0。 題目的原文敘述 測試範例 Example 1: Input: equations = [["a","b"],["b",
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
提供法律諮詢一段時間後,我們觀察到一個特殊現象。來問法律問題的人,常處於極端狀態。犯罪事實不是私人糾紛,影響涉及公權利,需要審酌各種證據資料才能認定。如何透過公證來保障自己無罪,是不可能的。需要與律師討論做準備,或在收到傳票後再討論該怎麼處理。
Thumbnail
律師通常會在法庭上、政府機構或私人法律事務中「建議」(給予建議)和「代表」(代言)客戶。
Thumbnail
生活中難免遭遇民事、刑事案件煩心,但如果能在訴訟過程中,遇到一位值得託付的律師協助釐清案情並進行訴訟,想必是多數人的願望。然而讀者徵詢的人是否是真律師?如何分辨真假律師?是否可以透過政府提供的管道查詢律師?如果你對於相關問題有所疑惑,法洛威將為你解答相關問題。對於律師專業度足夠與否有興趣的讀者,歡迎
Thumbnail
可能很多人一輩子都不用走上訴訟這條路 或走進法院 所以可能很多人不知道什麼是「家事調查官」 我也是提出訴訟後接到電話才知道有這個角色 提出訴訟後不久 我接到一通來電 對方說自己是法院的家事調查官 想要跟我約見面確認通話方是我本人 我詢問地點…
Thumbnail
近日某件法諮對話,讓我覺得如果我猜大樂透的號碼有這麼準確,我就可以引退回鄉下過活惹...
Thumbnail
探討正義想關主題的桌上解謎遊戲, 好玩卻也能引人省思
Thumbnail
2023年1月1日起,國民法官制度正式上路,你我都可能成為國民法官!對於國民法官有很多疑問嗎?這篇懶人包」告訴你國民法官的資格、選任方式、權利義務等重要資訊。
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
提供法律諮詢一段時間後,我們觀察到一個特殊現象。來問法律問題的人,常處於極端狀態。犯罪事實不是私人糾紛,影響涉及公權利,需要審酌各種證據資料才能認定。如何透過公證來保障自己無罪,是不可能的。需要與律師討論做準備,或在收到傳票後再討論該怎麼處理。
Thumbnail
律師通常會在法庭上、政府機構或私人法律事務中「建議」(給予建議)和「代表」(代言)客戶。
Thumbnail
生活中難免遭遇民事、刑事案件煩心,但如果能在訴訟過程中,遇到一位值得託付的律師協助釐清案情並進行訴訟,想必是多數人的願望。然而讀者徵詢的人是否是真律師?如何分辨真假律師?是否可以透過政府提供的管道查詢律師?如果你對於相關問題有所疑惑,法洛威將為你解答相關問題。對於律師專業度足夠與否有興趣的讀者,歡迎
Thumbnail
可能很多人一輩子都不用走上訴訟這條路 或走進法院 所以可能很多人不知道什麼是「家事調查官」 我也是提出訴訟後接到電話才知道有這個角色 提出訴訟後不久 我接到一通來電 對方說自己是法院的家事調查官 想要跟我約見面確認通話方是我本人 我詢問地點…
Thumbnail
近日某件法諮對話,讓我覺得如果我猜大樂透的號碼有這麼準確,我就可以引退回鄉下過活惹...
Thumbnail
探討正義想關主題的桌上解謎遊戲, 好玩卻也能引人省思
Thumbnail
2023年1月1日起,國民法官制度正式上路,你我都可能成為國民法官!對於國民法官有很多疑問嗎?這篇懶人包」告訴你國民法官的資格、選任方式、權利義務等重要資訊。