写点什么

每日一题:LeetCode-695. 岛屿的最大面积

作者:半亩房顶
  • 2024-01-03
    北京
  • 本文字数:1001 字

    阅读完需:约 3 分钟

每日一题:LeetCode-695. 岛屿的最大面积

刷题使我快乐,满脸开心.jpg



题目

给你一个大小为 m x n 的二进制矩阵 grid


岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。


岛屿的面积是岛上值为 1 的单元格的数目。


计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0


示例 1:



输入:grid = [[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:


输入:grid = [[0,0,0,0,0,0,0,0]]输出:0
复制代码


提示:


  • m == grid.length

  • n == grid[i].length

  • 1 <= m, n <= 50

  • grid[i][j]01

思路

这道题其实应该算是比较简单的了,感觉需要说的重点就在于如何记录已经遍历过这个点了


通常做法可能是维护一个是否遍历的矩阵,但是其实这道题的情况下会有一个更取巧的做法:


可以把已经记入某个岛屿的方块值置为 0


这样一来,就可以不需要额外的空间来做记录了。剩下的感觉没太多要说的了。

代码

func maxAreaOfIsland(grid [][]int) int {    res := 0    m := len(grid)    n := len(grid[0])
var find func(x, y int) int find = func(x, y int) int { if x < 0 || x >= m || y >= n || y < 0 || grid[x][y] == 0 { return 0 } // 四个方向遍历,记入面积并将当前位置值记为0 grid[x][y] = 0 return 1 + find(x-1, y) + find(x, y-1) + find(x+1, y) + find(x, y+1) }
temp := 0 // 一个个坐标遍历,发现 1 进入计算面积逻辑 for i := 0; i < m; i++ { for j := 0; j < n; j++ { if grid[i][j] == 1 { // 遍历完此岛屿,则比较面积大小更新最大面积数 temp = find(i, j) if temp > res { res = temp } } } } return res}
复制代码




欢迎关注公众号交流更多题目~


发布于: 刚刚阅读数: 3
用户头像

半亩房顶

关注

人生那么长,能写多少bug? 2018-11-16 加入

我希望,自己永远是自己。我希望,远离bug。

评论

发布
暂无评论
每日一题:LeetCode-695. 岛屿的最大面积_Go_半亩房顶_InfoQ写作社区