题目

给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。返回执行此操作后,grid 中最大的岛屿面积是多少?岛屿 由一组上、下、左、右四个方向相连的 1 形成。

分析

经典的图论中连同分量的题目。包含的知识点:

  1. 基本DFS 框架,marked辅助数组
  2. 连通分量个数统计:每次dfs返回 做一次统计
  3. 标识节点属于哪个连通分量
  4. 每个连通分量的大小
  5. 本题将一格变成1,把岛屿连接起来,要注意一格将两个方向的岛屿连接起来的时候,这两个方向上的有可能是同一个岛屿,不要重复累加

算法

  1. dfs 遍历
    这一步统计出每个岛屿大小,标记出每个格子所属的岛屿
  2. 连接
    累加一个格子变成1以后可以连接起来的岛屿总大小,注意不同方向上接壤的岛屿可能是同一个岛屿

代码

class Solution {public int largestIsland(int[][] grid) {marked = new int[grid.length][grid[0].length];for (int[] row : marked) {Arrays.fill(row, -1);}int maxIsland = 0;for (int i = 0; i < grid.length; ++i) {for (int j = 0; j < grid[i].length; ++j) {if (grid[i][j] == 0 || marked[i][j] >= 0) continue;dfs(i, j, grid);isLands.add(curSize);maxIsland = Math.max(maxIsland, curSize);curSize = 0;}}int maxSize = 0;for (int i = 0; i < grid.length; ++i) {for (int j = 0; j < grid[i].length; ++j) {if (grid[i][j] == 1) continue;Map<Integer, Integer> includes = new HashMap<>();int[][] dirs = new int[][] {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};for (int[] dir : dirs) {int ii = i + dir[0];int jj = j + dir[1];if (ii >= 0 && ii < grid.length && jj >= 0 && jj < grid[ii].length && marked[ii][jj] != -1) {includes.put(marked[ii][jj], isLands.get(marked[ii][jj]));}}int size = 1;for (Map.Entry<Integer, Integer> e : includes.entrySet()) {size += e.getValue();}maxSize = Math.max(maxSize, size);}}return maxSize == 0 ? maxIsland : maxSize;}private void dfs(int i , int j, int[][] grid) {marked[i][j] = isLands.size();++ curSize;int[][] dirs = new int[][] {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};for (int[] dir : dirs) {int ii = i + dir[0];int jj = j + dir[1];if (ii >= 0 && ii < grid.length && jj >= 0 && jj < grid[ii].length&& grid[ii][jj] == 1 && marked[ii][jj] == -1) {dfs(ii, jj, grid);}}}private int curSize = 0;private ArrayList<Integer> isLands = new ArrayList<>();private int[][] marked;
}

LeetCode 827 最大人工岛 题解相关推荐

  1. Leetcode 827. 最大人工岛 C++

    Leetcode 827. 最大人工岛 题目 在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地. 进行填海之后,地图上最大的岛屿面积是多少?(上.下.左.右四个方 ...

  2. Leetcode 827.最大人工岛(Making A Large Island)

    Leetcode 827.最大人工岛 1 题目描述(Leetcode题目链接)   在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地. 进行填海之后,地图上最大的 ...

  3. Java实现 LeetCode 827 最大人工岛(DFS+暴力模拟)

    827. 最大人工岛 在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地. 进行填海之后,地图上最大的岛屿面积是多少?(上.下.左.右四个方向相连的 1 可形成岛屿 ...

  4. 力扣leetcode 827. 最大人工岛

    文章目录 题目链接与描述 关键词:hash表 方法一: 运行截图 代码 结尾 题目链接与描述 https://leetcode.cn/problems/making-a-large-island/ 给 ...

  5. 图解LeetCode——827. 最大人工岛(难度:困难)

    一.题目 给你一个大小为 n x n 二进制矩阵 grid .最多 只能将一格 0 变成 1 . 返回执行此操作后,grid 中最大的岛屿面积是多少? 岛屿 由一组上.下.左.右四个方向相连的 1 形 ...

  6. LeetCode 827 最大人工岛 C++

    首先DFS遍历"自然"岛的时候,用一个数字位区分每个岛,具体想法是对每个岛进行编号,dfs的同时把1改为当前岛的编号,同时用一个map记录该编号岛的面积. 进入正式流程 遍历矩阵: ...

  7. LeetCode 827题 最大人工岛

    LeetCode 827题 也是递归 class Solution {boolean isChanged = false;int count = 0;int resNum = 0;Map<Int ...

  8. 岛屿问题 通用解-463.岛屿周长-200.岛屿数量-695.岛屿的最大面积-827.最大人工岛

    文章目录 岛屿问题 如何在网格上做DFS(通用解) 463.岛屿的周长 题目 题解 -通用模板 题解2 200.岛屿数量 题目 题解 695.岛屿的最大面积 题目 题解 827.最大人工岛 题目 题解 ...

  9. 9.18 困难力扣827. 最大人工岛

    827. 最大人工岛 - 力扣(LeetCode) 给你一个大小为 n x n 二进制矩阵 grid .最多 只能将一格 0 变成 1 . 返回执行此操作后,grid 中最大的岛屿面积是多少? 岛屿 ...

最新文章

  1. 李飞飞AI100报告提出14大AI机遇与挑战(附pdf)
  2. 坐在隔壁的00后同事,让我看到了职场“反内卷”的希望
  3. Ubuntu文件的复制、移动和删除命令
  4. UIImagePikerController 浅析
  5. 详解spl_autoload_register()函数
  6. Django 模型 —— 模型介绍
  7. pfSense Book下载
  8. super 和 this 关键字的比较+调用构造器(this)+动态绑定
  9. 多媒体计算机的关键技术有哪些,多媒体计算机的定义分类和关键技术
  10. 专治月薪不过万的副业大全
  11. Java专项面试训练(一)
  12. carmaker/matlab联合仿真(三) 生成车道线点,拟合多项式方程
  13. 计算机辅助翻译 火云译客,中文在线翻译韩语
  14. 主板怎么开启csm_B460主板BIOS设置CSM选项无法开启的解决方法
  15. 解决Ubuntu16.04 wineQQ和wps office 不能输入中文的问题
  16. Mac电脑CPU、风扇转速、电池电量等硬件参数监控免费小插件-iStats
  17. oracle调优(1)
  18. 另一个伊甸 更新进度 23-01-27
  19. 微服务系列笔记之Mico Api详解
  20. 千山独行-一个人的创业路(连载一)

热门文章

  1. 1、Android单元测试
  2. Navicat链接数据库奇葩错误
  3. AcWing 826. 单链表
  4. 【品牌推广公司】品牌营销,奇龙十三哥浅谈如何进行有效的口碑传播
  5. win10 docker无法启动nginx 443端口被占用
  6. 遥感影像分类、目标检测、语义分割、实例分割的异同
  7. twilio php 发送短信,php - PHP,Twilio SMS-捕获twilio的响应 - SO中文参考 - www.soinside.com...
  8. 敌人的敌人是朋友:苹果欲联手Google干掉Amazon?
  9. canvas绘制图片,图片变模糊
  10. √[ (11^4+100^4+111^4)÷2]的开根号算法