在二维地图上, 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。

class Solution {public:int index = 2;int row = 0;int col = 0;map<int,int> area_memory;//将每个连通域用index填充,并将其面积返回int area(vector<vector<int>>& grid,int i,int j,int index){if(!isgrid(i,j)||grid[i][j]!=1) return 0; grid[i][j] = index;//左,下,右,上return 1+area(grid,i-1,j,index)+area(grid,i,j+1,index)+area(grid,i+1,j,index)+area(grid,i,j-1,index);}//判断是否在图内bool isgrid(int i,int j){if(i>=0&&i<row&&j>=0&&j<col) return true;return false;}int largestIsland(vector<vector<int>>& grid) {int res = 0;row = grid.size();if(!row) return 0;col = grid[0].size();//将陆地用index填充for(int i = 0;i<row;i++)for(int j = 0;j<col;j++){if(grid[i][j]==1){int count = area(grid,i,j,index);area_memory[index++] = count; //<index,面积>res = max(res, count);//记录最大面积}}//如果没有陆地,直接返回if(res==0) return 1;//遍历海洋for(int i = 0;i<row;i++)for(int j = 0;j<col;j++){if(grid[i][j]==0){int temp = 0;set<int> s;neighbor(grid,s,i,j);for(int idx:s){temp += area_memory[idx];}res = max(res,temp+1);}}return res;}//返回海洋的四邻居到set中void neighbor(vector<vector<int>>& grid,set<int> &s,int i ,int j){if(isgrid(i-1,j)&&grid[i-1][j]!=0) s.insert(grid[i-1][j]); if(isgrid(i,j+1)&&grid[i][j+1]!=0) s.insert(grid[i][j+1]);if(isgrid(i+1,j)&&grid[i+1][j]!=0) s.insert(grid[i+1][j]); if(isgrid(i,j-1)&&grid[i][j-1]!=0) s.insert(grid[i][j-1]); }
};

827. 最大人工岛相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 【827. 最大人工岛】

    来源:力扣(LeetCode) 描述: 给你一个大小为 n x n 二进制矩阵 grid .最多 只能将一格 0 变成 1 . 返回执行此操作后,grid 中最大的岛屿面积是多少? 岛屿 由一组上.下 ...

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

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

  9. leetcode:827. 最大人工岛【联通分量分组 + 遍历0查看四周】

    分析 思路比较简单 就是找到所有联通分量 然后标个序号 记录每个联通分量的大小 然后遍历每个0的位置,看看四周有多少个不同的联通分量加起来 注意特判全1的情况 Ac code class Soluti ...

最新文章

  1. js 编码、解码与asp.net 编码、解码
  2. ARM uboot Legacy uImage 和 fit img (Flattened uImage Tree)原理介
  3. 全排列算法的全面解析
  4. 通过调色板(QPalette)将readonly为true的QLineEdit颜色设置为灰色
  5. 温故知新,DotNet Core SDK和.Net CLI十八般武艺
  6. macOS下载、安装、使用tomcat服务器及IntelliJ IDEA for Mac 如何集成、配置、运行tomcat
  7. friendly发音_friendly是什么意思_friendly怎么读_friendly翻译_用法_发音_词组_同反义词_友好的_亲密的-新东方在线英语词典...
  8. Haproxy基于ACL做访问控制
  9. 【简●解】POJ 1845 【Sumdiv】
  10. python 旋转矩阵_【每日算法Day 93】不用额外空间,你会旋转一个矩阵吗?
  11. eclipse连接数据库
  12. Varnish 503错误
  13. GoogleEarth崩了!!除了重装还可以这样解决......
  14. 模拟蒙蒂霍而悖论游戏——三门游戏python
  15. 使用Jquery制作精美的图片展示效果
  16. 京东、京东全球购、考拉等电商平台入驻费用详解
  17. 时序预测 | MATLAB实现BiLSTM时间序列预测
  18. 【Java Set接口】
  19. 织梦官方幻灯片调用以及幻灯片模糊的处理办法
  20. 3年汽车软件测试工程师的经验总结

热门文章

  1. Win10 21H1系统远程桌面多用户登录解除限制
  2. PHP构造函数(方法)的使用
  3. uni.chooseAddress抖音小程序拿不到抖音商城的收货地址?
  4. 设计模式 -- 工厂模式
  5. (数据结构)如何手搓一棵红黑树(RedBlack-Tree)
  6. 手机信号格数与GPRS关系
  7. Mega2560同时控制三个步进电机
  8. 根据不同按钮显现不同的表格(表格为多个)
  9. H3C产品防伪查询指导
  10. .net开发安卓入门 - 布局与样式(像素单位px、dp、sp的区别)