200 島嶼數量(中等) LeetCode

2021-10-08 04:13:17 字數 2463 閱讀 3748

廣度優先遍歷(bfs),使用列表queue模擬佇列isselected矩陣儲存該點是否被遍歷過。時間複雜度o(m

∗n)o(m*n)

o(m∗n)

,空間複雜度o(m

對比題解區後,發現上述**有兩個缺點:

改進方法:

改進後的**為:

class

solution

:def

numislands

(self, grid: list[list[

str]])

->

int:

count =

0 queue = deque(

)for i in

range

(len

(grid)):

for j in

range

(len

(grid[0]

)):if grid[i]

[j]==

'1':

queue +=

[(i,j)

] count +=

1while queue:

x,y = queue.popleft(

)for k,m in

[(x-

1,y)

,(x+

1,y)

,(x,y-1)

,(x,y+1)

]:if0

<= k <

len(grid)

and0

<= m <

len(grid[0]

):if grid[k]

[m]==

'1':

grid[k]

[m]=

'0'(k,m)

)return count

時間複雜度o(m

∗n)o(m*n)

o(m∗n)

,空間複雜度o(m

本題的另外兩個解法是深度優先遍歷並查集,詳見官方解答。

20 4 20 島嶼數量 中等 200

給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1 示例 2 輸入 11000...

LeetCode 200 島嶼數量 中等

給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1 示例 2 輸入 11000...

200 島嶼數量

複雜度分析 時間複雜度 o m n 其中 m 和 n 分別為行數和列數。空間複雜度 最壞情況下為 o m n 此時整個網格均為陸地,深度優先搜尋的深度達到m n。class solution int numislands vector grid int cnt 0 for int i 0 i gri...