【图论】Leetcode 200. 岛屿数量【中等】

岛屿数量

  • 给你一个由 ‘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

解题思路

  • 1、使用深度优先搜索DFS来遍历二维网格,找到所有岛屿。(PS: 深度优先搜索(DFS)一般是使用递归来实现)
  • 2、对于每个遍历到的陆地(‘1’),开始进行搜索,将其与相邻的陆地标记为已访问过,直到将整个岛屿搜索完成。
  • 3、统计搜索过程中遇到的岛屿数量。

Java实现

public class NumberOfIslands {public int numIslands(char[][] grid) {if (grid == null || grid.length == 0 || grid[0].length == 0) {return 0;}int m = grid.length;int n = grid[0].length;int count = 0;
//        {'1', '1', '0', '0', '0'},
//        {'1', '1', '0', '0', '0'},
//        {'0', '0', '1', '0', '0'},
//        {'0', '0', '0', '1', '1'}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == '1') {// 当前位置为陆地,开始进行深度优先搜索// 直到grid[i][j]周边没有相连的陆地dfs(grid, i, j);// 每开始一次搜索,岛屿数量加一count++;}}}return count;}/*** 深度优先搜索函数* @param grid* @param i* @param j*/private void dfs(char[][] grid, int i, int j) {int m = grid.length;int n = grid[0].length;// 边界条件和递归终止条件if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] == '0') {return;}grid[i][j] = '0'; //将当前单元格标记为已访问//继续搜索当前位置的上、下、左、右四个方向,探索相邻的单元格//直到没有相邻的岛屿(grid[i][j] == '0')dfs(grid, i + 1, j);dfs(grid, i - 1, j);dfs(grid, i, j + 1);dfs(grid, i, j - 1);}public static void main(String[] args) {NumberOfIslands islands = new NumberOfIslands();char[][] grid = {{'1', '1', '0', '0', '0'},{'1', '1', '0', '0', '0'},{'0', '0', '1', '0', '0'},{'0', '0', '0', '1', '1'}};System.out.println("Number of islands: " + islands.numIslands(grid));}
}

时间空间复杂度

  • 时间复杂度:O(m * n),其中 m 和 n 分别是二维网格的行数和列数,因为需要遍历整个二维网格。

  • 空间复杂度:O(m * n),深度优先搜索的递归调用可能达到 O(m * n) 的深度,其中 m 和 n 分别是二维网格的行数和列数。

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

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

相关文章

html+javascript,用date完成,距离某一天还有多少天

图片展示: html代码 如下: <style>* {margin: 0;padding: 0;}.time-item {width: 500px;height: 45px;margin: 0 auto;}.time-item strong {background: orange;color: #fff;line-height: 100px;font-size: 40px;font-family: Arial;padding: 0 10px;margin-right: 10px…

【hive】远程remote debug hive的方法,用于hive监听器/钩子编写

背景 写hive监听器时候需要拿到hive对象但hive是在集群linux主机上运行的。通过jdbc提交的sql具体执行过程不会再idea中运行。所以如果需要拿到hive对象有可能存在两个思路&#xff1a; &#xff08;1&#xff09;想办法写个钩子或者监听器&#xff0c;将需要的内容写成json字…

最简单的ubuntu安装docker教程

本文参考自docker官方教程&#xff1a;ubuntu上安装docker 一、安装Docker 第一步&#xff1a;添加Docker官方的GPG密钥 直接复制所有代码&#xff0c;作为一行运行即可 sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/k…

Python学习从0开始——项目一day01爬虫(二)

Python学习从0开始——项目一day01爬虫&#xff08;二&#xff09; 一、解析response数据二、json转换三、文件保存四、存储json对象五、完整代码 上一篇 一、解析response数据 在已经知道我们获取图片的最终URL存在于请求响应response中&#xff0c;下一步的重点就放在解析re…

Python格式化输出的三种常用方式

1.使用%做格式化&#xff0c;不推荐 str1"%d年%d月%d日 %s出生"%{year,month,day,name} print(str1)2.使用f’{变量}做格式化 str2f"{year}年{month}月{day}日{name}出生" print(str2) #如果要输出的字符串有{}&#xff0c;如 book"相对论" st…

latex中图片或者表格过大 导致页面里有大片空白

针对这个问题&#xff0c;可以通过把表格与上下文的距离调小&#xff0c;表格与标题的距离调小。 \vspace{-0.8cm} %调整图片/表格与上下文的垂直距离 -注意&#xff1a;该语句&#xff0c;要在begin{figure}和end{figure}上面和前面使用&#xff08;可以分别使用&#xff09;…

Redis-底层数据结构

Redis-底层数据结构 redisObject对象机制对象共享引用计数以及对象的消毁 动态字符串SDS链表链表的优缺点: 压缩链表ziplist的缺点 字典-Dictrehash渐进式rehash 整数集-intSet内存分布图整数集合的升级 跳表 - ZSkipList快表-quicklistlistpack redisObject对象机制 typedef s…

DP10RF001一款200MHz~960MHz 低功耗(G)FSK/OOK无线收发芯片应用无线遥控工控设备无线门禁传感器等

产品概述 DP10RF001是一款工作于200MHz~960MHz范围内的低功耗、高性能、单片集成的(G)FSK/OOK无线收发机芯片。内部集成完整的射频接收机、射频发射机、频率综合器、调制解调器&#xff0c;只需配备简单、低成本的外围器件就可以获得良好的收发性能。芯片支持灵活可设的数据包…

Jmeter从数据为查找结果集数据方法随笔

一、Jmeter连接数据库 1.下载对应数据库的驱动包到jmeter安装目录的lib下ext文件中&#xff0c;并导入到jmeter的测试计划中&#xff0c;本实例中使用的是mysql如下所示&#xff1a; 点击测试计划–>点击浏览–>选中mysql驱动jar包–>打开 2.添加线程组&#xff0c;…

vue使用后端提供的接口

在 Vue 中使用后端接口 在 Vue.js 应用中使用后端提供的接口可以让你与服务器通信&#xff0c;获取和更新数据。本文将介绍如何在 Vue 中使用后端接口。 1. 安装 Axios 首先&#xff0c;你需要安装 Axios 库&#xff0c;这是一个用于发起 HTTP 请求的 JavaScript 库。在终端…

毕设(三)——nb-lot与onenet通信

文章目录 一、前言二、nb-lot与onenet的连接2.1 创建产品2.2 创建设备2.3 连接2.4 发送数据 三、onenet的数据可视化 刚刚看了一个关于nb-lot的视频&#xff0c;我看到up是用onenet原生的GUI就能做到数据的显示&#xff0c;十分亮眼 主要是它能把地图也一起显示出来&#xff0c…

2024mathorcup数学建模思路教学

大家好呀&#xff0c;认证杯数学建模开始了&#xff0c;来说一下选题建议以及思路吧&#xff1a; 首先定下主基调&#xff0c; 本次mathorcup数学应用挑战赛推荐大家选择C题&#xff0c;难度方面&#xff1a;A≈B&#xff1e;D&#xff1e;C。 我们预计4.13日晚上前更新完毕…

网络通信——常见结构及强联网游戏和弱联网游戏区别

声明&#xff1a;本文为个人笔记&#xff0c;用于学习研究使用非商用&#xff0c;内容为个人研究及综合整理所得&#xff0c;若有违规&#xff0c;请联系&#xff0c;违规必改。 网络通信——常见结构及强联网游戏和弱联网游戏区别 文章目录 网络通信——常见结构及强联网游戏和…

Stable Diffusion 本地部署教程:详细步骤与常见问题解析

作为一位热衷于探索前沿AI技术的博主&#xff0c;近期我深度研究了Stable Diffusion模型的本地部署过程。在这篇教程中&#xff0c;我将详述从环境准备到模型运行的每个步骤&#xff0c;并针对常见的部署问题给出解决方案&#xff0c;帮助你顺利在本地开启Stable Diffusion的创…

【图像处理】-小议YUV色彩空间-YUV和RGB格式的来由,相互关系以及转换方式,并对编程实现的YUV转为RGB程序进行介绍

小议YUV色彩空间 摘要: 在视频图像处理等相关相关领域&#xff0c;YUV是一个经常出现的格式。本文主要以图解的资料形式详细描述YUV和RGB格式的来由&#xff0c;相互关系以及转换方式&#xff0c;并对编程实现的YUV转为RGB程序进行介绍。 1 引言 自然界的颜色千变万化&#xff…

UVA1593 Alignment of Code 代码对齐 解题报告

UVA1593 Alignment of Code 代码对齐 解题报告 题目链接 https://vjudge.net/problem/UVA-1593 题目大意 输入若干行代码&#xff0c;要求各列单词的左边界对齐且尽量靠左。单词之间至少要空一格。每个单词不超过80个字符&#xff0c;每行不超过180个字符&#xff0c;一共最…

【前缀合】Leetcode 和可被 K 整除的子数组

题目解析 974. 和可被 K 整除的子数组 算法讲解 前置知识点&#xff1a; 同余定理&#xff1a;(ab) % c 0 可以得出 a % c b % cC中负数求余的结果是负数&#xff0c;但是本题需要的是正数&#xff0c;所以我们为了修正这个结果&#xff0c;需要进行(负数 % 正数 正数) %…

记录JavaScript练习

定时器练习 HTML代码&#xff1a; <div id"lottery"><div class"box-one">1</div><div class"box-two">2</div><div class"box-three">3</div><div class"box-four">4&l…

Spring MVC 视图解析器

在Spring MVC中&#xff0c;配置视图解析器可以帮助将Controller返回的字符串转换为实际的页面地址。以下是配置视图解析器的步骤&#xff1a; 选择视图解析器&#xff1a;根据使用的模板技术&#xff0c;选择合适的视图解析器。常见的视图解析器有InternalResourceViewResolv…

怎么重构一个程序

文章目录 什么是重构为什么重构重构场景怎么重构代码命名复杂度与依赖传递过度设计没有时间重构 什么是重构 摘自《重构&#xff1a;改善既有代码的设计》 重构(名词形式): 对软件内部结构的一种调整&#xff0c;目的是在不改变软件可观察行为的前提下&#xff0c;提高其可理解…