827. 最大人工岛

在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地。

进行填海之后,地图上最大的岛屿面积是多少?(上、下、左、右四个方向相连的 1 可形成岛屿)

示例 1:

输入: [[1, 0], [0, 1]]
输出: 3
解释: 将一格0变成1,最终连通两个小岛得到面积为 3 的岛屿。
示例 2:

输入: [[1, 1], [1, 0]]
输出: 4
解释: 将一格0变成1,岛屿的面积扩大为 4。
示例 3:

输入: [[1, 1], [1, 1]]
输出: 4
解释: 没有0可以让我们变成1,面积依然为 4。
说明:

1 <= grid.length = grid[0].length <= 50
0 <= grid[i][j] <= 1

PS:
DFS把岛屿拿出来,每个岛屿放上不同的标记
然后,把每个岛屿的面积放进数组存上,
然后再找每一个海洋,看看要是能把当前海洋变成陆地,组成的最大的面积是多少记录一下

class Solution {public int largestIsland(int[][] grid) {int[] map = new int[grid.length*grid[0].length/2+3];int index = 2;for (int i = 0; i < grid.length; i++) {for (int j = 0; j < grid[0].length; j++) {if (grid[i][j] == 1) {fullIsland(grid, i, j, index++);}}}for (int i = 0; i < grid.length; i++) {for (int j = 0; j < grid[0].length; j++) {if (grid[i][j] > 0) {map[grid[i][j]]++;}}}int max = 0;for (int i = 0; i < grid.length; i++) {for (int j = 0; j < grid[0].length; j++) {if (grid[i][j] == 0) {int t = 1,t1=0,t2=0,t3=0,t4=0;if (i > 0 && (t1 = grid[i - 1][j]) > 1) {t += map[t1];}if (i < grid.length - 1 && (t2 = grid[i + 1][j]) > 1 && t2 !=t1) {t += map[t2];}if (j > 0 && (t3 = grid[i][j - 1]) > 1 && t2 !=t3 && t1 !=t3) {t += map[t3];}if (j < grid[0].length - 1 && (t4 = grid[i][j + 1]) > 1 && t4 != t3 && t2 != t4 && t1 != t4) {t += map[t4];}max = Math.max(max, t);}}}if (max == 0) {if (grid[0][0] == 0) {return 1;} else {return grid.length*grid[0].length;}}return max;}public void fullIsland(int[][] grid, int i, int j, int index) {grid[i][j] = index;if (i > 0 && grid[i - 1][j] == 1) {fullIsland(grid, i - 1, j, index);}if (i < grid.length - 1 && grid[i + 1][j] == 1) {fullIsland(grid, i + 1, j, index);}if (j > 0 && grid[i][j - 1] == 1) {fullIsland(grid, i, j - 1, index);}if (j < grid[0].length - 1 && grid[i][j + 1] == 1) {fullIsland(grid, i, j + 1, index);}}
}

Java实现 LeetCode 827 最大人工岛(DFS+暴力模拟)相关推荐

  1. Java实现 LeetCode 808 分汤 (暴力模拟)

    808. 分汤 有 A 和 B 两种类型的汤.一开始每种类型的汤有 N 毫升.有四种分配操作: 提供 100ml 的汤A 和 0ml 的汤B. 提供 75ml 的汤A 和 25ml 的汤B. 提供 5 ...

  2. Java实现 LeetCode 799 香槟塔 (暴力模拟)

    799. 香槟塔 我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了 ...

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

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

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

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

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

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

  6. LeetCode 827 最大人工岛 题解

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

  7. 827. 最大人工岛[DFS+岛屿编号]

    题解 思路: 翻转0==>1后,需要将周围存在的岛屿的面积做累加. 因此为了方便,我们不在每一次翻转后都去计算一遍岛屿的面积,这样会使得复杂度大幅提升. 可以考虑第一次便利时,我们就将岛屿编号, ...

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

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

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

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

最新文章

  1. 视频分享网站首页:最新视频特效
  2. MongoDB应用场景
  3. macos安装homebrew
  4. 文巾解题 1433. 检查一个字符串是否可以打破另一个字符串
  5. springboot使用原生servlet、filter、listener
  6. python如何进阶提升_Python序列操作之进阶篇
  7. Spark SQL(一)之简介
  8. css高度已知,左右定宽,中间自适应三栏布局
  9. C++vector相关学习,我的理解
  10. oracle打开文件模式无效,oracle expdp导入时 提示“ORA-39002: 操作无效 ORA-39070: 无法打开日志文件 ”...
  11. 工业互联网方案商“全应科技”获明势领投Pre-A轮融资
  12. python getcwd_Python os.getcwd()方法
  13. 解决UE4官方文档C++API查询慢问题
  14. qq登录界面及其实现
  15. Zemax操作41--公差分析(一)
  16. VMware虚拟机安装Win10
  17. z-blogPHP在西部数码虚拟主机上遇到WTS-WAF错误拦截情况,协商好久他们还是妥协了...
  18. 学生信息管理系统(PHP)
  19. 斑马条码打印机常见故障大盘点
  20. Android 编译之make基础(转)

热门文章

  1. springboot 下浏览本地图片
  2. 手机备忘录里的录音怎么转文字
  3. JAVA游戏交易平台计算机毕业设计Mybatis+系统+数据库+调试部署
  4. 打击游戏作弊,诸多侠盗猎车手Online玩家遭封号
  5. 【已解决】VMware Vmware提示以独占方式锁定此配置文件失败 虚拟机开机黑屏
  6. Ubuntu FAQ
  7. 美元霸权的潜在风险——无锚货币,为什么都要刺激消费
  8. 使用百度地图进行android开发
  9. RNN BPTT算法详细推导
  10. 网页跳转到关注公众号实现