島嶼的最大面積

2021-10-03 22:17:06 字數 1456 閱讀 8794

題目:

給定乙個包含了一些 0 和 1的非空二維陣列 grid , 乙個 島嶼 是由四個方向 (水平或垂直) 的 1 (代表土地) 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。

找到給定的二維陣列中最大的島嶼面積。(如果沒有島嶼,則返回面積為0。)

示例 1:

[[0,0,1,0,0,0,0,1,0,0,0,0,0],

[0,0,0,0,0,0,0,1,1,1,0,0,0],

[0,1,1,0,1,0,0,0,0,0,0,0,0],

[0,1,0,0,1,1,0,0,1,0,1,0,0],

[0,1,0,0,1,1,0,0,1,1,1,0,0],

[0,0,0,0,0,0,0,0,0,0,1,0,0],

[0,0,0,0,0,0,0,1,1,1,0,0,0],

[0,0,0,0,0,0,0,1,1,0,0,0,0]]

對於上面這個給定矩陣應返回 6。注意答案不應該是11,因為島嶼只能包含水平或垂直的四個方向的『1』。

示例 2:

[[0,0,0,0,0,0,0,0]]

對於上面這個給定的矩陣, 返回 0。

解題思路:

典型的dfs題,最直接的思路就是挨個遍歷,然後計算結果,當周圍是0或者出了矩陣範圍時就終止此次遍歷。

這裡面上下左右是滿足要求的下一步,所以存在重複遍歷問題,因此,我們需要把遍歷過的點置0,這樣在下乙個點回到此位置時,不會重複計算此位置。

思路很簡單,如下。

class

solution

}return res;

}int

sidewithside

(vectorint>>

& grid,

int row,

int col,

int rows,

int cols)

;//定義四個方向

int dy[4]

=;int ans=1;

//此位置加入面積

for(

int k=

0;k<

4;k++

)return ans;}}

;

遞迴演算法自然可以轉化為迴圈方式,分析此題其實是要遍歷上下左右四個方向,所以需要有容器儲存,其實棧可以理解為遞迴,不斷分解為子問題,一層層解決,最後是棧底的大問題。所以我們用棧來將遞迴改寫為迴圈。

class

solution

;//四個方向

int dy[4]

=;for(

int k=

0;k<

4;k++)}

res=

max(res,tmp)

;//每一次都儲存最後的結果}}

return res;}}

;

島嶼的最大面積

給定乙個包含了一些 0 和 1的非空二維陣列 grid 乙個 島嶼 是由四個方向 水平或垂直 的 1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0...

島嶼的最大面積

給定乙個包含了一些 0 和 1的非空二維陣列 grid 乙個 島嶼 是由四個方向 水平或垂直 的 1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0...

島嶼的最大面積

695.島嶼的最大面積 給定乙個包含了一些 0 和 1的非空二維陣列grid,乙個島嶼是由四個方向 水平或垂直 的1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0...