题目描述
Given a non-empty 2D array grid of 0’s and 1’s, an island is a group of 1’s (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.
Find the maximum area of an island in the given 2D array. (If there is no island, the maximum area is 0.)
Example 1:
|
|
Given the above grid, return 6. Note the answer is not 11
, because the island must be connected 4-directionally.
Example 2:
|
|
Given the above grid, return 0.
Note
The length of each dimension in the given grid does not exceed 50.
解法一:
这道题跟Number of Islands 和 Number of Distinct Islands 是同一种类型的,不过这道题要统计岛的大小,再来更新结果res
。先用递归来做,遍历grid
,当遇到为1
的点,我们调用递归函数,在递归函数中,我们首先判断i
和j
是否越界,还有grid[i][j]
是否为1
,我们没有用visited
数组,而是直接修改了grid
数组,遍历过的标记为-1
。如果合法,那么cnt
自增1
,并且更新结果res
,然后对其周围四个相邻位置分别调用递归函数即可,代码如下:
C++
|
|
swift
|
|
解法二:
下面是迭代的写法,BFS遍历,使用queue来辅助运算,思路没啥太大区别,都是套路,都是模版,往里套就行了,参见代码如下:
C++
|
|