20天刷题计划-695. 岛屿的最大面积

简介: 给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。

一、题目描述:

给你一个大小为 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 gridi 为 0 或 1

二、思路分析:

根据需要,那么肯定需要逐一遍历整个数组,由于并不知道如何才可以测量出岛屿的面积,所以为了测量整个岛屿的面积,只能采取一步步探索的方式: 当登陆某个岛屿后,以此时所处位置为行动中心,随后分别向 东、南、西、北四个方向前进。如果向某一方向前进后其为‘0’或登记过的地方则停止探索,而当步入新地点时,则继续以当前所处位置为行动中心,随后再一次向 东、南、西、北 四个方向前进,以此类推。即这个部分将某一个点的上下左右四个点放进去,进行循环遍历 当某一个坐标点在二维矩阵中,并且= 1 是一个岛屿时,此时需要返回递归,继续四个方向上进行遍历

三、AC 代码:

class Solution {
    public int maxAreaOfIsland(int[][] grid) {
        int ans = 0;
        for (int i = 0; i != grid.length; ++i) {
            for (int j = 0; j != grid[0].length; ++j) {
                int cur = 0;
                Queue<Integer> queuei = new LinkedList<Integer>();
                Queue<Integer> queuej = new LinkedList<Integer>();
                queuei.offer(i);
                queuej.offer(j);
                while (!queuei.isEmpty()) {
                    int cur_i = queuei.poll(), cur_j = queuej.poll();
                    if (cur_i < 0 || cur_j < 0 || cur_i == grid.length || cur_j == grid[0].length || grid[cur_i][cur_j] != 1) {
                        continue;
                    }
                    ++cur;
                    grid[cur_i][cur_j] = 0;
                    int[] di = {0, 0, 1, -1};
                    int[] dj = {1, -1, 0, 0};
                    for (int index = 0; index != 4; ++index) {
                        int next_i = cur_i + di[index], next_j = cur_j + dj[index];
                        queuei.offer(next_i);
                        queuej.offer(next_j);
                    }
                }
                ans = Math.max(ans, cur);
            }
        }
        return ans;
    }
}

四、总结:

网络异常,图片无法展示
|

对于这种重复的操作,显然离不开循环或递归。在此题便是采用递归的方式解决。


写题解不易,若对你有帮助,点赞评论再走吧。ヽ(✿゚▽゚)ノ,如有不足,请大家斧正。

相关文章
wustojc1007求圆的面积和周长
wustojc1007求圆的面积和周长
55 0
|
9月前
leetcode-695:岛屿的最大面积
leetcode-695:岛屿的最大面积
66 0
|
9月前
|
存储 算法 程序员
【算法训练-搜索算法 一】【DFS网格搜索框架】岛屿数量、岛屿的最大面积、岛屿的周长
【算法训练-搜索算法 一】【DFS网格搜索框架】岛屿数量、岛屿的最大面积、岛屿的周长
142 0
解决岛屿问题
解决岛屿问题
56 0
Leecode 695. 岛屿的最大面积
Leecode 695. 岛屿的最大面积
49 0
leetcode 695 岛屿的最大面积
leetcode 695 岛屿的最大面积
74 0
leetcode 695 岛屿的最大面积
|
定位技术
用并查集解决「岛屿最大面积问题」
用并查集解决这个问题时间花费会比 DFS 和 BFS 更大,但是最主要的还是学习并查集的思想以及如何实现。
103 0
AcWing 604. 圆的面积
AcWing 604. 圆的面积
87 0
AcWing 604. 圆的面积