leedcode 827. 最大人工岛 (洪水填充)
测试链接:https://leetcode.cn/problems/making-a-large-island/
思路:
先用洪水填充给每个岛屿进行编号,以便最后答案更新区分,设置一个used[]数组,用来避免更新答案时候算了重复的岛屿,为了避免全图都为陆地的特殊情况,我们在进行岛屿编号的时候,先更新答案为最大岛屿的面积,接着遍历每个海水的点,计算周围岛屿的面积之和,更新答案,记得加上该点本身的面积,所以初始化ans1=1
题解:
const int N=3e5;
class Solution {
public:
int ans=0;
int dir[4][2]={1,0,-1,0,0,1,0,-1};
int cursize[N];
bool used[N];
int n,m;
int id=1;
void dfs(int i,int j,vector<vector<int>>&grid)
{
grid[i][j]=id;
cursize[id]++;
for(int k=0;k<4;k++)
{
int x = i+dir[k][0];
int y = j+dir[k][1];
if(x<0||x>=n||y<0||y>=m||grid[x][y]!=1)continue;
dfs(x,y,grid);
}
}
int largestIsland(vector<vector<int>>& grid) {
n = grid.size();
m = grid[0].size();
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(grid[i][j]==1)
{
id++;
dfs(i,j,grid);
}
ans = max(ans,cursize[id]);
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)cout<<grid[i][j];
cout<<endl;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(grid[i][j]==0)
{
int ans1=1;
for(int k=0;k<4;k++)
{
int x = i+dir[k][0];
int y = j+dir[k][1];
if(x<0||x>=n||y<0||y>=m||grid[x][y]==0||used[grid[x][y]])continue;
used[grid[x][y]]=true;
ans1+=cursize[grid[x][y]];
}
for(int k=0;k<4;k++)
{
int x = i+dir[k][0];
int y = j+dir[k][1];
if(x<0||x>=n||y<0||y>=m||grid[x][y]==0)continue;
used[grid[x][y]]=false;
}
ans=max(ans,ans1);
}
}
}
return ans;
}
};
leedcode 827. 最大人工岛 (洪水填充)的更多相关文章
- opencv中的洪水填充算法
在图像处理里,如果我们需要填充一个区域,使该区域为相同的颜色,则比较常用的是洪水填充法.洪水填充法可以用DFS也可以用BFS实现. opencv下有函数实现该功能: CVAPI(void) cvFlo ...
- Java实现 LeetCode 827 最大人工岛(DFS+暴力模拟)
827. 最大人工岛 在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地. 进行填海之后,地图上最大的岛屿面积是多少?(上.下.左.右四个方向相连的 1 可形成岛屿 ...
- [LeetCode] Flood Fill 洪水填充
An image is represented by a 2-D array of integers, each integer representing the pixel value of the ...
- LeetCode刷题 Flood Fill 洪水填充问题
An image is represented by a 2-D array of integers,each integers,each integer respresenting the sta ...
- 图像处理之泛洪填充算法(Flood Fill Algorithm)
泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法又称洪水填充算法是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows paint的油漆桶功能.算法的原理很简单,就 ...
- 图像处理------泛洪填充算法(Flood Fill Algorithm) 油漆桶功能
泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法又称洪水填充算法是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows paint的油漆桶功能.算法的原理很简单,就 ...
- 八 ROI(region of interest)和泛洪填充
一.ROI 感兴趣区(Region of Interest,ROIs) 是图像的一部分,它通过在图像上选择或使用诸如设定阈值(thresholding) 或者从其他文件(如矢量> 转换获得等方法 ...
- Swift LeetCode 目录 | Catalog
请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift 说明:题目中含有$符号则为付费题目. 如 ...
- C#LeetCode刷题-深度优先搜索
深度优先搜索篇 # 题名 刷题 通过率 难度 98 验证二叉搜索树 22.2% 中等 99 恢复二叉搜索树 45.1% 困难 100 相同的树 48.1% 简单 101 对称二叉树 4 ...
- 字符型图片验证码识别完整过程及Python实现
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
随机推荐
- RPC实战与核心原理之优雅启动
优雅启动:如何避免流量打到没有启动完成的节点? 回顾 优雅停机,就是为了让服务提供方在停机应用的时候,保证所有调用方都能"安全"地切走流量,不再调用自己,从而做到对业务无损.其中实 ...
- algolia使用配置教程-为SSG静态站增加algolia搜索功能
要构建SSG静态站点时,一般为了方便增加algolia搜索框,但这里algolia配置使用时用很多的坑,折腾了我好几天,网上没有一个可用的教程. 自己弄了几天,终于搞明白里面的道道了,现在分享出来给大 ...
- Linux 统计活跃线程和线程数
摘要:使用Linux命令ps -eT动态查看进程中,以指定字符串打头的活跃线程和线程数. 动态查看进程的线程数及活跃线程数 实现方案 在Linux系统中,可以使用以下命令来动态查看进程中名字包含& ...
- Java 提取url的域名
有时候,我们需要校验URL的域名是否在白名单中,故需要提取其中的域名.可以使用java标准类库java.net.URL进行提取,方法如下: import org.apache.commons.la ...
- gitlab跨版本升级
此文档只讲述基于Omnibus 包安装的GitLab 修复示例: 本文采用升级gitlab版本来修复漏洞.因为gitlab官方会定期发行新版本用于修复漏洞 此升级为跨版本升级(14.10.x-ee - ...
- 直播预告丨《Flink提交流程&如何debug和跟踪流程(on yarn)》
4月20日晚19点30分,袋鼠云数栈技术研发团队开发工程师--莫问,将会为大家直播分享<Flink提交流程&如何debug和跟踪流程(on yarn)>. 课程内容主要包括以下三点 ...
- HarmonyOS NEXT仓颉开发语言实战案例:动态广场
大家好,今日要分享的是使用仓颉语言开发动态广场页面,也比较像朋友圈页面: 整个页面分为两部分,分别是导航栏和状态列表,导航栏比较简单,我们可以先写下导航栏的具体代码和页面的基本结构: Column{ ...
- MKL库求解矩阵特征值、特征向量(LAPACKE_dgeev、dsyev)
LAPACK(Linear Algebra PACKage)库,是用Fortran语言编写的线性代数计算库,包含线性方程组求解(\(AX=B\)).矩阵分解.矩阵求逆.求矩阵特征值.奇异值等.该库用B ...
- Xamarin.Android 关于EditText 设置光标焦点 问题
EditText,你会发现当点击第一个EditText时,第二个EditText会有光标闪以下,或者点击第二个或者之后的EditText,第一个EditText会有光标闪一下.通过Log你会发现从第二 ...
- C# WinForm 窗体阴影
https://www.cnblogs.com/mqxs/p/9466218.html public class FormShadow : Form { public FormShadow() { I ...