岛屿数量 (力扣) dfs + bfs (JAVA)

news2024/11/22 23:57:07

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

示例 1:

输入:grid = [
[“1”,“1”,“1”,“1”,“0”],
[“1”,“1”,“0”,“1”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“0”,“0”,“0”]
]

输出:1

示例 2:

输入:grid = [
[“1”,“1”,“0”,“0”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“1”,“0”,“0”],
[“0”,“0”,“0”,“1”,“1”]
]

输出:3

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 300
grid[i][j] 的值为 ‘0’ 或 ‘1’

解题思路:

1.每个岛屿由于有水的隔离所以与其他岛屿互不影响

2.每当发现一块陆地,可以先计数,再感染这个岛屿,代表已经来过,直到发现一个新的未被感染的岛屿再计数

3.可采用深度优先,与广度优先算法

在这里插入图片描述

dfs 代码:

class Solution {
    public int numIslands(char[][] grid) {
    	   if(grid.length == 0) return 0;
    	   int nums = 0;
           for(int i = 0; i < grid.length; i ++)//行数
        	   for(int j = 0; j < grid[0].length; j ++) {//列数
        		   if(grid[i][j] == '1'){
                     nums ++;
        		     infect(grid, i, j);//计数 + 感染  
                   } 
        	   }
           return nums;
    }
    public static void infect(char a[][], int x, int y) {
    	   a[x][y] = '2';//感染
    	   int fx[] = {-1, 1, 0, 0};
    	   int fy[] = {0, 0, -1, 1};
    	   int fxx = 0, fyy = 0;
    	   for(int i = 0; i < 4; i ++) {
    		   fxx = fx[i] + x;
    		   fyy = fy[i] + y;
    		   if(fxx >= 0 && fxx < a.length && fyy >= 0 && fyy < a[0].length && a[fxx][fyy] == '1') infect(a, fxx, fyy);//要求本块是1,且相邻也为1才能感染
    	   }
    }
}

在这里插入图片描述

bfs 代码:

class Solution {
    public int numIslands(char[][] grid) {
    	   if(grid.length == 0) return 0;
    	   int nums = 0;
           for(int i = 0; i < grid.length; i ++)//行数
        	   for(int j = 0; j < grid[0].length; j ++) {//列数
        		   if(grid[i][j] == '1') {
                     nums ++;
        		     infect(grid, i, j);   
                   }
        	   }
           return nums;
    }
    public static void infect(char a[][], int x, int y) {
    	   a[x][y] = '2';
    	   Queue qux = new LinkedList<Integer>();
    	   Queue quy = new LinkedList<Integer>();
    	   qux.add(x);
    	   quy.add(y);
    	   int fx[] = {-1, 1, 0, 0};
    	   int fy[] = {0, 0, -1, 1};
    	   int fxx = 0, fyy = 0;
    	   while(!qux.isEmpty()) {
    		   x = (int)qux.peek();
    		   y = (int)quy.peek();
    		   
    		   for(int i = 0; i < 4; i ++) {
    			   fxx = x + fx[i];
    			   fyy = y + fy[i];
    			   if(fxx >= 0 && fxx < a.length && fyy >= 0 && fyy < a[0].length && a[fxx][fyy] == '1') {
    				   qux.add(fxx);
    				   quy.add(fyy);
    				   a[fxx][fyy] = '2';
    			   }
    		   }
    		   qux.poll();
    		   quy.poll();
    	   }
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/746086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在内卷化竞争时代,金龙鱼重返增长的关键到底是什么?

提到欧丽薇兰、胡姬花、香满园、海皇、金味、丰苑、锐龙洁劲100、丸庄酱油等品牌,多数消费者的第一反应是什么?多数消费者认为是某个不知名的新品牌。问题的重点不在产品&#xff0c;而在主品牌定位。 事实上&#xff0c;这都是金龙鱼母公司益海嘉里旗下的品牌。内行都知道益海…

“坏邻居”导致的kafka生产者TPS下降原因排查

背景&#xff1a; 今天测试了两种不同的场景下kafka producer的tps性能数据&#xff0c;两种场景下都是使用3个线程&#xff0c;每个线程都是对应一个kafka producer&#xff0c;测试发送到kafka集群的消息的量&#xff0c;两个场景的区别是场景A只发送kafka消息&#xff0c;场…

自定义类型

目录 什么是自定义类型 结构体 结构体的声明 常规结构体的声明形式 特殊的结构体声明形式 匿名结构体&#xff1a; 匿名结构体的重命名&#xff1a; 注意事项&#xff1a; 结构体的自引用 什么是结构体的自引用 结构体变量的定义与初始化 方法一&#xff1a; 方法…

总结python安装包(库)过程中的采坑

绝大数的包比如numpy、pandas可以用pip install或者conda install解决&#xff0c;使用pip时可以用pip -V命令看一下自己的pip安装在了哪个虚拟环境&#xff0c;一般pip安装在哪默认就把python包安装在哪。 pip -VC:\Users\20478>pip -V pip 23.1.2 from D:\Python\lib\sit…

Android Java代码与JNI交互 JNI子线程访问Java方法 (八)

🔥 Android Studio 版本 🔥 🔥 创建包含JNI的类 JNIInvokeMethod.java 🔥 package com.cmake.ndk1.jni;import com.cmake.ndk1.base.ICallbackMethod; import com.cmake.ndk1.base.IThreadCallback;public class JNIInvokeMethod {static {System.loadLibrary("…

VBA代码如何切换word和excel(3)

【分享成果&#xff0c;随喜正能量】人不能因为一件好事&#xff0c;高兴一整年&#xff0c;却能因为一个创伤&#xff0c;郁郁终生。痛苦给人的刺激&#xff0c;总是远远大于快乐。成年人的烦恼&#xff0c;和谁说都不合适&#xff0c;悲喜自渡&#xff0c;他人难悟。人最强大…

DDOS防御,阻止DDoS攻击的15个独家技巧

DDoS攻击可以使企业完全宕机数小时以上&#xff0c;而宕机的后果可能很严重&#xff0c;各种规模的企业和政府都可能受到影响。2021年&#xff0c;由于系统中断一小时导致销售额大幅下降&#xff0c;亚马逊为此遭受了约3400万美元的直接财务损失。而随后由于Fakebook的服务中断…

Spring源码系列-第2章-后置工厂处理器和Bean生命周期

第2章-后置工厂处理器和Bean生命周期 后置工厂处理器属于后置处理器&#xff0c;后置处理器是Spring最核心的部分&#xff0c;Spring几乎所有的附加功能全由它完成。 什么是BeanPostProcessor&#xff1f; public interface BeanPostProcessor {/*** Apply this {code BeanPos…

桥接(Bridge)模式

目录 动机使用场景参与者优劣协作实现相关模式应用和思考 桥接模式是将抽象部分和它的实现部分分离&#xff0c;使他们都可以独立的变化的对象结构型模式。桥接模式通过将继承改为组合的方式来解决问题&#xff1b;具体来说就是抽取其中一个维度并使之成为独立的类层次。 动机…

gma 2 教程(二)数据操作:2. 功能逻辑架构和栅格数据类型简介

功能逻辑架构 gma栅格数据操作所含功能/属性的关系结构如下图所示&#xff1a; 栅格数据类型 gma栅格数据类型继承自GDAL&#xff0c;与NumPy数据关联&#xff0c;但又有所不同&#xff0c;详细关系见下表&#xff1a; 栅格格式支持 栅格格式信息统计 gma继承了GDAL全部的栅格…

详谈三次握手

作者&#xff1a;爱塔居 专栏&#xff1a;计算机网络 作者简介&#xff1a;大三学生&#xff0c;希望和大家一起进步 经过三次的对话&#xff0c;这两个火柴人才确认了双方都能够说话&#xff0c;都能听见。三次握手也是一样的&#xff0c;只要这样才能确认双方的接受与发送能力…

文件操作--按数据块读写文件

函数fread&#xff08;&#xff09;和函数fwrite&#xff08;&#xff09;用于一次读取一组数据&#xff0c;即按数据块读写文件。fread&#xff08;&#xff09;的函数原型为&#xff1a; unsigned int fread(void *buffer ,unsigned int size,unsigned int count ,FILE *fp);…

raid5故障导致LeftHand存储崩溃的服务器数据恢复案例

HP-LeftHand存储简介&#xff1a; HP LeftHand存储支持RAID5、RAID6、RAID10磁盘阵列&#xff0c;支持卷快照&#xff0c;卷动态扩容等。 服务端&#xff1a; 客户端&#xff1a; LeftHand存储分为三个层级&#xff1a;物理磁盘、逻辑磁盘、逻辑卷。多个物理磁盘组成一个逻辑的…

pdf文档加水印怎么弄?用这款软件很方便

在工作中&#xff0c;我们经常需要将PDF文件发送给他人&#xff0c;但无法保证文件内容不被窃取&#xff0c;因此需要添加水印来保证文件的安全性。如果你不知道如何给PDF文件添加水印&#xff0c;以下两款软件可以帮助你轻松实现&#xff0c;一起来看看吧&#xff01; 方法一&…

火爆全网,自动化测试-Allure完美测试报告(详全)卷起来...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、allure简介 A…

网络协议与攻击模拟-17-DNS协议-报文格式

二、DNS 查询 客户机想要访问www.baidu.com&#xff0c;根据自己的 TCP / IP 参数&#xff0c;向自己的首选 DNS 服务器发送 DNS 请求 首选 DNS 收到客户机的请求后&#xff0c;会去查询自己的区域文件&#xff0c;找不到www.baidu.com的 IP 地址信息&#xff08;将请求转发到…

天池大赛中药说明书实体识别挑战冠军方案开源(二)部署运行实战 附详细操作说明

目录 Introduction 导言环境搭建环境 Github地址项目目录说明使用步骤下载预训练模型更改部分代码模型训练参数设置BERT-CRF模型训练BERT-SPAN模型训练BERT-MRC模型训练 运行训练预测复赛 test 文件 &#xff08;上述模型训练完成后&#xff09; 参考资料其它资料下载 Introduc…

Rdkit|化学指纹(fingerprint)

github:地址 文章目录 Rdkit|化学指纹&#xff08;fingerprint&#xff09;化学指纹&#xff08;fingerprint&#xff09;RDKFingerprintMorgan指纹提供的指纹信息存储在字典中 MACCS指纹AtomPair指纹TopologicalTorsion指纹参考 Rdkit|化学指纹&#xff08;fingerprint&#x…

使用楔形步进体模进行X射线骨密度测定

来源&#xff1a;投稿 作者&#xff1a;洪棋 编辑&#xff1a;学姐 骨密度(BMD)被广泛应用于骨折风险的预测和骨质疏松症的常规识别。双能x线骨密度仪(DXA)在临床上广泛用于测量脊柱、髋关节和前臂的骨密度(aBMD)。放射学骨密度测定法(Radiographic absorpometry, RA)是最早的骨…

最全Linux Shell详细教程

一、环境准备 我们在这里就在本地测试学习&#xff0c;因此我在这里先不建议大家这么着急去买服务器来学&#xff0c;这样比较费钱&#xff0c;等我们学好这些基础之后&#xff0c;再去上手服务器&#xff0c;那将是手到擒来。 本地学习工具&#xff1a;虚拟机 如果你没有该工…