Leetcode 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

题解

并查集
我们先将相连的陆地加到同一个集合中,这样我们能得到多个集合。然后,我们遍历海洋,我们将其变成陆地,我们加上周围相连陆地所在集合的元素个数便是新岛的面积,这里需要注意一点,同一个集合只会计算一次,我们需要用一个set集合记录,避免重复计算。详细过程见代码

代码

class UF{public:vector<int> parent;vector<int> size;UF(int n){parent = vector<int>(n,0);size = vector<int>(n,1);for(int i=0; i<n; i++)parent[i] = i;}int find(int x){while(x != parent[x]){x = parent[x];}return x;}void Union(int x,int y){int pX = find(x);int pY = find(y);if(pX == pY)    return;if(size[pX] > size[pY]){parent[pY] = pX;size[pX] += size[pY];}else{parent[pX] = pY;size[pY] += size[pX];}}int getSize(int x){return size[find(x)];}
};
class Solution {public:int largestIsland(vector<vector<int>>& grid) {int m = grid.size(),n = grid[0].size();int ans = 0;UF uf = UF(m*n);for(int i=0; i<m; i++){for(int j=0; j<n; j++){if(grid[i][j] == 1){if(i-1>=0 && grid[i-1][j]==1){uf.Union(i*n+j,(i-1)*n+j);}if(j-1>=0 && grid[i][j-1]==1){uf.Union(i*n+j,i*n+j-1);}ans = max(ans,uf.getSize(i*n+j));}   }}int dir[4][2] = { {1,0},{0,-1},{-1,0},{0,1}};set<int> visit;for(int i=0; i<m; i++){for(int j=0; j<n; j++){if(grid[i][j] == 0){int now = 1;for(int k=0; k<4; k++){if(i+dir[k][0]>=0 && i+dir[k][0]<m && j+dir[k][1]>=0 && j+dir[k][1]<n){if(grid[i+dir[k][0]][j+dir[k][1]] == 1){int parent = uf.find((i+dir[k][0])*n+j+dir[k][1]);if(visit.find(parent) == visit.end()){visit.insert(parent);now += uf.getSize(parent);}}}}visit.clear();ans = max(ans,now);}}}return ans;}
};

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/making-a-large-island
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Leetcode 827. 最大人工岛 C++相关推荐

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

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

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

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

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

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

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

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

  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. Linux --进程间通信--共享内存
  2. 火山引擎向企业客户开放上万款抖音同款特效
  3. php怎么读取图片并输出,php读取图片内容并输出到浏览器的实现代码_PHP教程
  4. 会员管理scrm系统精细化运营更好促进成交
  5. 在UltraEdit中使用正则表达式
  6. 相同的研究手段,相反的研究结论例子
  7. 企业进销存管理系统_攻略 | 七巧Plus定制您的专属进销存管理系统
  8. SQLite移植手记1
  9. all方法 手写promise_我团队的一年前端实现Promise所有方法
  10. 重金悬赏丨2019 华为 IoT 开发者大赛喊你加入“群聊”,倾听科技的“声音”!...
  11. 使用 Design Pattern Toolkit 进行模型驱动的开发入门
  12. 酒店预订微信小程序怎么开发?
  13. Linux: 多线程
  14. envi查看灰度直方图_ENVI实习直方图匹配校正分类.doc
  15. 禁用uwebiview 的反弹功能 bounces
  16. spark 实现K-means算法
  17. 「前端进阶」JS中的内存管理
  18. 傍上阿里系大款,禧云国际如何守住“自由身”?
  19. php3d按钮,css3实现3D按钮效果的文章推荐
  20. 今日头条安卓_我为什么开始对今日头条和抖音反感了

热门文章

  1. 闲话网名之“intelboy”
  2. Openlayers使用geoserver发布的图层
  3. 项目实战:ASP.NET:C/S架构 大学BBS论坛项目(推荐★★★)
  4. 中移动在SOA和云计算融合发展的思考
  5. MathType下载和安装(与Visio搭配使用)
  6. 记录bat脚本启动IE11并启用ActiveX控件
  7. 【Scratch】青少年蓝桥杯_每日一题_4.07_画正六边形组成的图形
  8. PSP开发指南第五课
  9. STM32开源代码——YS-V0.7语音识别模块程序
  10. IT人员逃不过的35-40梗-对于新时代那些做互联网、零售电商人员的转型的深层思考