圖論應用: 尋找法官 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

80會員
417Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目敘述 題目會給我們一個參數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",
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
圖形演算法在資料處理上扮演重要角色。本文介紹圖形的歷史、定義、技術用途,以及為什麼我們要關心圖形演算法。文末還提及圖形演算法在機器學習領域的應用。下次將介紹更詳細的圖形演算法內容。
Thumbnail
  回想起剛從機械系畢業時,我懂得怎麼計算,也熟悉各種機械理論。但真正要自己設計時,卻只能朦朧應用,可以說是亂兜各種機件,最後拼出了一個四不像的奇怪機構。   而十年後的現在,對機構學的熱情讓我始終從事「能應用『動力機構』」的工作。看過許多機械構造也自己鑽研許多,才能達到現在類「得心應手」的地步。
Thumbnail
因最近看到又有人討論起推背圖後,我不禁回想去過去台灣這邊也是拿推背圖來說誰當選。 所以整理一下過去對於推背圖的一些瞭解,重新解剖一下解讀的走向。 首先要先弄清楚推背圖的規律,我整頓完思緒後基本上可以歸納幾點。 1.此預言是描述[中國大陸的最大勢力],所以如今的現在,描述的只會是[中共國],而非[中華
Thumbnail
-> 這篇在說什麼 這篇文章提供一個科目圖的視角來分析科系,每個學生可以依照自己喜歡的工作,來反推出需要學習的科目,進而反推出選這科系的成本效益值 此篇也會leverage這科目圖工具去解除一些大家的誤解/盲點 出路廣的科系就是好科系? 是否有盲點? 出路廣的科系還有分類? 前言 如何判斷?
Thumbnail
平常有些細節都會被我們省略,想想看: 你穿襪子,是先穿左腳還是右腳? 你刷牙,是先刷左邊還是右邊? 你上完大號,是先拿衛生紙擦屁股,還是先沖馬桶? 撲克牌裡,哪一張人頭是獨眼? 蒙娜麗莎的微笑,是左手壓在右手上,還是右手壓在左手上?... -追蹤、訂閱《郝廣才日日談》來閱讀全文,每天為你說一個故事。
Thumbnail
有些重要的資訊看數字看不出來,那要看什麼?看圖。 亞伯拉罕.沃爾德(Abraham Wald)是一個在美國哥倫比亞大學任教的統計學教授,他在1943年二次大戰中,因為一張圖,救了無數飛行員的生命... -追蹤、訂閱《郝廣才日日談》來閱讀全文,每天為你說一個故事。
哈耶克這種人之所以能在漢語圈傳播得很遠,有一點就是因為他的行為模式很像是胡適那種士大夫,這種人就非常精確地體現了胡適所謂的那種「對政治不感興趣的興趣」。所謂「不感興趣的興趣」,從最難聽的方向進行惡意解釋,恰好就是鮑德溫用來罵羅瑟米爾爵士的那句話:他們追求不負責任的權力,正如歷代的婊子追求牌坊。
Thumbnail
 最近接觸一位熱愛八九十年代流行歌曲的小學生,他在言談間也不時哼起一兩句,使我不期然想起小時候的自己。  香江小故事 「I, I, I was born in Beijing,不知命運是誰定。」黎天
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
圖形演算法在資料處理上扮演重要角色。本文介紹圖形的歷史、定義、技術用途,以及為什麼我們要關心圖形演算法。文末還提及圖形演算法在機器學習領域的應用。下次將介紹更詳細的圖形演算法內容。
Thumbnail
  回想起剛從機械系畢業時,我懂得怎麼計算,也熟悉各種機械理論。但真正要自己設計時,卻只能朦朧應用,可以說是亂兜各種機件,最後拼出了一個四不像的奇怪機構。   而十年後的現在,對機構學的熱情讓我始終從事「能應用『動力機構』」的工作。看過許多機械構造也自己鑽研許多,才能達到現在類「得心應手」的地步。
Thumbnail
因最近看到又有人討論起推背圖後,我不禁回想去過去台灣這邊也是拿推背圖來說誰當選。 所以整理一下過去對於推背圖的一些瞭解,重新解剖一下解讀的走向。 首先要先弄清楚推背圖的規律,我整頓完思緒後基本上可以歸納幾點。 1.此預言是描述[中國大陸的最大勢力],所以如今的現在,描述的只會是[中共國],而非[中華
Thumbnail
-> 這篇在說什麼 這篇文章提供一個科目圖的視角來分析科系,每個學生可以依照自己喜歡的工作,來反推出需要學習的科目,進而反推出選這科系的成本效益值 此篇也會leverage這科目圖工具去解除一些大家的誤解/盲點 出路廣的科系就是好科系? 是否有盲點? 出路廣的科系還有分類? 前言 如何判斷?
Thumbnail
平常有些細節都會被我們省略,想想看: 你穿襪子,是先穿左腳還是右腳? 你刷牙,是先刷左邊還是右邊? 你上完大號,是先拿衛生紙擦屁股,還是先沖馬桶? 撲克牌裡,哪一張人頭是獨眼? 蒙娜麗莎的微笑,是左手壓在右手上,還是右手壓在左手上?... -追蹤、訂閱《郝廣才日日談》來閱讀全文,每天為你說一個故事。
Thumbnail
有些重要的資訊看數字看不出來,那要看什麼?看圖。 亞伯拉罕.沃爾德(Abraham Wald)是一個在美國哥倫比亞大學任教的統計學教授,他在1943年二次大戰中,因為一張圖,救了無數飛行員的生命... -追蹤、訂閱《郝廣才日日談》來閱讀全文,每天為你說一個故事。
哈耶克這種人之所以能在漢語圈傳播得很遠,有一點就是因為他的行為模式很像是胡適那種士大夫,這種人就非常精確地體現了胡適所謂的那種「對政治不感興趣的興趣」。所謂「不感興趣的興趣」,從最難聽的方向進行惡意解釋,恰好就是鮑德溫用來罵羅瑟米爾爵士的那句話:他們追求不負責任的權力,正如歷代的婊子追求牌坊。
Thumbnail
 最近接觸一位熱愛八九十年代流行歌曲的小學生,他在言談間也不時哼起一兩句,使我不期然想起小時候的自己。  香江小故事 「I, I, I was born in Beijing,不知命運是誰定。」黎天