⛳圖論應用: 計算子島嶼的數量 Count Sub Islands_Leetcode #1905

閱讀時間約 1 分鐘

題目敘述 1905. Count Sub Islands


給定兩個相同大小的二維陣列grid1, grid2。

格子點為0的地方代表海洋,格子點為1的地方代表陸地。

島嶼的定義是4連通(上、下、左、右)相鄰在一起的陸地。


如果有某個區域在grid2 是陸地而且在grid1也是陸地,
那麼這些區域就稱為「子島嶼」

請問grid2裡有多少座子島嶼?


測試範例

Example 1:

raw-image
Input: grid1 = [[1,1,1,0,0],[0,1,1,1,1],[0,0,0,0,0],[1,0,0,0,0],[1,1,0,1,1]], grid2 = [[1,1,1,0,0],[0,0,1,1,1],[0,1,0,0,0],[1,0,1,1,0],[0,1,0,1,0]]
Output: 3
Explanation:
紅色區域就是子島嶼,總共有3座。



Example 2:

raw-image
Input: grid1 = [[1,0,1,0,1],[1,1,1,1,1],[0,0,0,0,0],[1,1,1,1,1],[1,0,1,0,1]], grid2 = [[0,0,0,0,0],[1,1,1,1,1],[0,1,0,1,0],[0,1,0,1,0],[1,0,0,0,1]]
Output: 2
Explanation:
紅色區域就是子島嶼,總共有2座。

約束條件

Constraints:

  • m == grid1.length == grid2.length

m = 輸入陣列的高度

  • n == grid1[i].length == grid2[i].length

n = 輸入陣列的寬度

  • 1 <= m, n <= 500

輸入陣列的高度和寬度都介於1 ~ 500 之間

  • grid1[i][j] and grid2[i][j] are either 0 or 1.

每個格子點都是1(陸地)或0(海洋)。


觀察


關鍵點在於如何計算「子島嶼」

實務上,圖論裡最常用演算法模板就是DFS 或者 BFS

如果題目沒有特別指定,DFS寫起來比較直覺也比較簡單。



演算法 DFS先削去不一致的格子點,接著計算子島嶼。


第一步: 先消去grdi2上面不一致的格子點,
也就是grid2是陸地,但是在grid1是海洋的格子點。


第二步: 在grid2用DFS+四聯通計算子島嶼的數目,返回答案。


程式碼 DFS先削去不一致的格子點,接著計算子島嶼。

class Solution:
def countSubIslands(self, grid1: List[List[int]], grid2: List[List[int]]) -> int:

m=len(grid1)
n=len(grid1[0])

def dfs(i,j):
if i<0 or i>=m or j<0 or j>=n or grid2[i][j]==0:
return

grid2[i][j]=0
dfs(i+1,j)
dfs(i,j+1)
dfs(i,j-1)
dfs(i-1,j)
return

# removing all the gird cell which is land on grid2, water on grid1
for i in range(m):
for j in range(n):
if grid2[i][j]==1 and grid1[i][j]==0:
dfs(i,j)

sub_island=0
# counting sub-islands
for i in range(m):
for j in range(n):
if grid2[i][j]==1:
dfs(i,j)
sub_island+=1
return sub_island


複雜度分析

時間複雜度: O(mn)

所有格子點最多掃描兩次,總共有O(mn)個格子點。


空間複雜度: O(mn)

所有格子點最多掃描兩次,總共有O(mn)個格子點,遞迴最大深度為O(mn)。


Reference:

[1] Count Sub Islands - LeetCode

78會員
413內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目敘述 N-ary Tree Postorder Traversal 題目給定一個n-ary(每個節點最多n個子樹)的樹根。 請返回後序拜訪這棵樹的軌跡。 推廣後的後序拜訪的定義: 1.從左到右依序拜訪所有子樹。 2.拜訪目前的節點。
題目敘述 145. Binary Tree Postorder Traversal 題目給定一個二元樹的根結點。 請輸出後序拜訪(Post-order traversal)的拜訪序列。 後序拜訪的定義: 1.拜訪左子樹。 2.拜訪右子樹。 3.拜訪目前的節點。
題目敘述 Combination Sum II_Leetcode #40 給定一個整數陣列candidates 和 目標值target。 每個陣列元素只能選擇一次,請問有多少種組合方法,可以使得組合數總和 = target? 請把滿足組合數總和 = target的組合方法以陣列的形式返回答案
題目敘述 Integer to English Words 給定一個整數num 請轉換成對應的的英文數字表達(One, Two, Three, ... 那種數字表達式)
題目敘述: Minimum Cost to Convert String I 給定字元轉換映射表original, changes和對硬的成本陣列cost。 請問字串source轉換到字串destination的最小成本是多少? 如果無解,請返回-1 如果有解,請返回整體的轉換最小成本。
給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。 請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。
題目敘述 N-ary Tree Postorder Traversal 題目給定一個n-ary(每個節點最多n個子樹)的樹根。 請返回後序拜訪這棵樹的軌跡。 推廣後的後序拜訪的定義: 1.從左到右依序拜訪所有子樹。 2.拜訪目前的節點。
題目敘述 145. Binary Tree Postorder Traversal 題目給定一個二元樹的根結點。 請輸出後序拜訪(Post-order traversal)的拜訪序列。 後序拜訪的定義: 1.拜訪左子樹。 2.拜訪右子樹。 3.拜訪目前的節點。
題目敘述 Combination Sum II_Leetcode #40 給定一個整數陣列candidates 和 目標值target。 每個陣列元素只能選擇一次,請問有多少種組合方法,可以使得組合數總和 = target? 請把滿足組合數總和 = target的組合方法以陣列的形式返回答案
題目敘述 Integer to English Words 給定一個整數num 請轉換成對應的的英文數字表達(One, Two, Three, ... 那種數字表達式)
題目敘述: Minimum Cost to Convert String I 給定字元轉換映射表original, changes和對硬的成本陣列cost。 請問字串source轉換到字串destination的最小成本是多少? 如果無解,請返回-1 如果有解,請返回整體的轉換最小成本。
給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。 請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。
你可能也想看
Thumbnail
八十-二十法則提到,在多數生活的現象中,約80%的效果是來自於20%的原因,除了經濟學、學習理論外,這個法則同樣也可以應用在生活中的幸福感上。 我們需要認知到擁有的越多不一定會越快樂,反而有可能會因為無法專注在少數事物上而產生空虛、迷茫的感覺。「極簡」精神最重要的一點在於放下對於「多」的執著,將有
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
相信多數人都有這樣的經驗,願意無償的準備一場驚喜;投入時間、投入金錢、投入似乎源源不絕的愛。在準備的過程中不覺得累、甚至還樂在其中,那是種很踏實的感覺,因為我們很確定我們應該、想要這麼做。為什麼為心愛的人準備這一切的「過程」會如此甜美呢?由愛做為行動的動力(機)來源與其他行動本質上有什麼差異
Thumbnail
上篇進一步認識基本的圖形架構與三大 Graph 算法,那首先從 shortest path 開始,我們會陸續去理解這些算法,以及可能的應用,如果還沒有看過上一篇的,可以點以下連結~那我們就開始吧! 【圖論Graph】Part1:初探圖形與圖形演算法之應用
Thumbnail
本篇文章深入介紹了圖形的基本概念、組成和應用。從圖形的基本組成,到圖的類型與種類,再到圖形演算法的三大類型,本文將接續圖形領域的深入學習,並分享了對圖形的初步認識和學習方向的小心得。希望對正在學習圖形的人有所幫助。
Thumbnail
圖形演算法在資料處理上扮演重要角色。本文介紹圖形的歷史、定義、技術用途,以及為什麼我們要關心圖形演算法。文末還提及圖形演算法在機器學習領域的應用。下次將介紹更詳細的圖形演算法內容。
Thumbnail
冷冷的天氣中,能到草地上跑跑跳跳 、曬曬太陽是多麼幸福美好的事! 在一次這樣的集會中, 老師詢問孩子們我們要在即將到來的春節做什麼跟大家一起共度呢? 孩子們覺得可以唱唱跳跳~ 老師便提議一首可愛又有特色的歌曲, 孩子們一起坐在草地上玩草、玩樹枝、聽歌、學唱,好快樂唷!
Thumbnail
  回想起剛從機械系畢業時,我懂得怎麼計算,也熟悉各種機械理論。但真正要自己設計時,卻只能朦朧應用,可以說是亂兜各種機件,最後拼出了一個四不像的奇怪機構。   而十年後的現在,對機構學的熱情讓我始終從事「能應用『動力機構』」的工作。看過許多機械構造也自己鑽研許多,才能達到現在類「得心應手」的地步。
Thumbnail
前文參考: 兩張圖回顧一週大盤與個股結構,再談一般人目前最安穩的獲利模式。 2月17日 然後,大家會發現,前文提到的比較現象,在最近幾日更為明確:
Thumbnail
-> 這篇在說什麼 這篇文章提供一個科目圖的視角來分析科系,每個學生可以依照自己喜歡的工作,來反推出需要學習的科目,進而反推出選這科系的成本效益值 此篇也會leverage這科目圖工具去解除一些大家的誤解/盲點 出路廣的科系就是好科系? 是否有盲點? 出路廣的科系還有分類? 前言 如何判斷?
Thumbnail
圖像傳遞資訊最大的好處是什麼?反應快。 1961年10月13日,東柏林設立小綠人交通號誌,這是由東德的心理學家卡爾.佩格勞(Karl Peglau)所設計。為了降低車禍意外,他創造頭戴帽子的可愛行人號誌... -追蹤、訂閱《郝廣才日日談》來閱讀全文,每天為你說一個故事。
Thumbnail
桑塔格的《論攝影》被攝影人視為聖經,但他並不是一本拍攝技巧指南的工具書,而是詮釋攝影、思考攝影的書籍。我以他的目錄章節為架構,寫下自己的筆記心得;紀錄之餘,希望也可以幫助到對此書感興趣的人。本篇為第一章〈在柏拉圖的洞穴裡〉的部分。
Thumbnail
八十-二十法則提到,在多數生活的現象中,約80%的效果是來自於20%的原因,除了經濟學、學習理論外,這個法則同樣也可以應用在生活中的幸福感上。 我們需要認知到擁有的越多不一定會越快樂,反而有可能會因為無法專注在少數事物上而產生空虛、迷茫的感覺。「極簡」精神最重要的一點在於放下對於「多」的執著,將有
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
相信多數人都有這樣的經驗,願意無償的準備一場驚喜;投入時間、投入金錢、投入似乎源源不絕的愛。在準備的過程中不覺得累、甚至還樂在其中,那是種很踏實的感覺,因為我們很確定我們應該、想要這麼做。為什麼為心愛的人準備這一切的「過程」會如此甜美呢?由愛做為行動的動力(機)來源與其他行動本質上有什麼差異
Thumbnail
上篇進一步認識基本的圖形架構與三大 Graph 算法,那首先從 shortest path 開始,我們會陸續去理解這些算法,以及可能的應用,如果還沒有看過上一篇的,可以點以下連結~那我們就開始吧! 【圖論Graph】Part1:初探圖形與圖形演算法之應用
Thumbnail
本篇文章深入介紹了圖形的基本概念、組成和應用。從圖形的基本組成,到圖的類型與種類,再到圖形演算法的三大類型,本文將接續圖形領域的深入學習,並分享了對圖形的初步認識和學習方向的小心得。希望對正在學習圖形的人有所幫助。
Thumbnail
圖形演算法在資料處理上扮演重要角色。本文介紹圖形的歷史、定義、技術用途,以及為什麼我們要關心圖形演算法。文末還提及圖形演算法在機器學習領域的應用。下次將介紹更詳細的圖形演算法內容。
Thumbnail
冷冷的天氣中,能到草地上跑跑跳跳 、曬曬太陽是多麼幸福美好的事! 在一次這樣的集會中, 老師詢問孩子們我們要在即將到來的春節做什麼跟大家一起共度呢? 孩子們覺得可以唱唱跳跳~ 老師便提議一首可愛又有特色的歌曲, 孩子們一起坐在草地上玩草、玩樹枝、聽歌、學唱,好快樂唷!
Thumbnail
  回想起剛從機械系畢業時,我懂得怎麼計算,也熟悉各種機械理論。但真正要自己設計時,卻只能朦朧應用,可以說是亂兜各種機件,最後拼出了一個四不像的奇怪機構。   而十年後的現在,對機構學的熱情讓我始終從事「能應用『動力機構』」的工作。看過許多機械構造也自己鑽研許多,才能達到現在類「得心應手」的地步。
Thumbnail
前文參考: 兩張圖回顧一週大盤與個股結構,再談一般人目前最安穩的獲利模式。 2月17日 然後,大家會發現,前文提到的比較現象,在最近幾日更為明確:
Thumbnail
-> 這篇在說什麼 這篇文章提供一個科目圖的視角來分析科系,每個學生可以依照自己喜歡的工作,來反推出需要學習的科目,進而反推出選這科系的成本效益值 此篇也會leverage這科目圖工具去解除一些大家的誤解/盲點 出路廣的科系就是好科系? 是否有盲點? 出路廣的科系還有分類? 前言 如何判斷?
Thumbnail
圖像傳遞資訊最大的好處是什麼?反應快。 1961年10月13日,東柏林設立小綠人交通號誌,這是由東德的心理學家卡爾.佩格勞(Karl Peglau)所設計。為了降低車禍意外,他創造頭戴帽子的可愛行人號誌... -追蹤、訂閱《郝廣才日日談》來閱讀全文,每天為你說一個故事。
Thumbnail
桑塔格的《論攝影》被攝影人視為聖經,但他並不是一本拍攝技巧指南的工具書,而是詮釋攝影、思考攝影的書籍。我以他的目錄章節為架構,寫下自己的筆記心得;紀錄之餘,希望也可以幫助到對此書感興趣的人。本篇為第一章〈在柏拉圖的洞穴裡〉的部分。