695. 岛屿的最大面积
岛屿的最大面积
题目描述:
给定一个包含了一些 0 和 1 的非空二维数组 grid 。
一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 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。
注意: 给定的矩阵grid 的长度和宽度都不超过 50。
思路:
经典dfs题目,加一个flag【i】【j】,如果访问了就把它置1,这样就不会有回去原来的位置
代码:
func maxAreaOfIsland(grid [][]int) int {
var max int
number := 1
var flag [51][51]int
move := [][]int{{1, 0}, {0, 1}, {-1, 0}, {0, -1}}
for i := 0; i < len(grid); i++ {
for j := 0; j < len(grid[0]); j++ {
if grid[i][j] != 0 && flag[i][j] == 0 {
queue := []int{i, j}
flag[i][j] = 1
for len(queue) != 0 {
tmppoint1 := queue[0]
tmppoint2 := queue[1]
for _, v := range move {
if tmppoint1+v[0] >= 0 && tmppoint1+v[0] < len(grid) && tmppoint2+v[1] >= 0 && tmppoint2+v[1] < len(grid[0]) && grid[tmppoint1+v[0]][tmppoint2+v[1]] == 1 && flag[tmppoint1+v[0]][tmppoint2+v[1]] == 0 {
queue = append(queue, tmppoint1+v[0], tmppoint2+v[1])
flag[tmppoint1+v[0]][tmppoint2+v[1]] = 1
number++
}
}
queue = append(queue[2:])
}
if number > max {
max = number
}
number = 1
}
}
}
return max
}
代码效率:
执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:2.2 MB, 在所有 Go 提交中击败了100.00%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!