当前位置: 首页 > news >正文

面试热题(岛屿数量)

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

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

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

输入:grid = [["1","1","1","1","0"],["1","1","0","1","0"],["1","1","0","0","0"],["0","0","0","0","0"]
]
输出:1

这种题型一般都是按照dfs进行遍历查找,因为一个位置上有8种选择

 所以我们应该提前的声明两个数组,一个数组中放x坐标,一个数组放y坐标

 //设置方向  上右下左int[] xnum={-1,0,1,0};int[] ynum={0,1,0,-1};

我觉得这东西和扫雷是一个性质

       将雷区看做是水域,数字区看成是我们的陆地,以当前节点为中心,往周围漫射(一条路走到底),但是如果

 

       如果我们从A点到B点,如果不加限制的话,我们同样也能从B点到A点,这样就有可能能造成死循环,或者使得最后的效率变慢,所以我们可以采用两种方式

第一种方式:额外的维护一个visited数组,对访问过的地域进行标记

visited=new boolean[row][column];

第二种方式:将访问过的陆地给填充成海域,不需要其他额外的操作

grid[i][j]='0';

       如果还不理解题,还可以这样想,假如题目数组中1组成的是由纯净水的组成的管道,我们每次遍历一个地点就是相当于给这些管道中滴了一滴红墨水,红墨水随着水的流动性,不一会这条管道中的纯净水都会变成红颜色的水

//相当于滴红墨水,需要知道该地点的坐标
private void dfs(char[][] grid, int x, int y) {}
       //如果是碰到水域,则停止遍历if(grid[x][y]=='0'){return;}//是陆地且没有被访问过,进行访问,并以该地点为中心,漫射if(grid[x][y]=='1'&&!visited[x][y]){visited[x][y]=true;//对于漫射的8种选择for (int i = 0; i <4; i++) {int newx=x+xnum[i];int newy=y+ ynum[i];//越界情况直接继续,不需要执行if(newx<0||newx>=row||newy<0||newy>=column||visited[newx][newy]){continue;}dfs(grid,newx,newy);}

在判断是否是一个新的岛屿,肯定需要满足两个条件:1.是陆地   2.没有被访问过

               //开始连接的岛屿,第一个if(!visited[i][j]&&grid[i][j]=='1'){count++;}

碰到新的陆地后,再进行重复的操作

dfs(grid,i,j);

好了,这道题的原理已经讲完,希望对大家能对这道题有一个比较深刻的印象

源码如下:

 //设置方向  上右下左int[] xnum={-1,0,1,0};int[] ynum={0,1,0,-1};boolean[][] visited;int row;int column;public int numIslands(char[][] grid) {//对入参进行判断if(grid==null||grid.length==0||grid[0].length==0){return 0;}int count=0;//从每一个点都开始进行遍历row=grid.length;column=grid[0].length;visited=new boolean[row][column];for (int i = 0; i <row; i++) {for (int j = 0; j <column; j++) {//开始连接的岛屿,第一个if(!visited[i][j]&&grid[i][j]=='1'){count++;dfs(grid,i,j);}}}return count;}private void dfs(char[][] grid, int x, int y) {//如果是碰到水域,则停止遍历if(grid[x][y]=='0'){return;}if(grid[x][y]=='1'&&!visited[x][y]){visited[x][y]=true;for (int i = 0; i <4; i++) {int newx=x+xnum[i];int newy=y+ ynum[i];if(newx<0||newx>=row||newy<0||newy>=column||visited[newx][newy]){continue;}dfs(grid,newx,newy);}}}

相关文章:

面试热题(岛屿数量)

给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假设该网格的四条边均…...

【WebRTC---源码篇】(二十四)GCC获取码率后的分配

RtpTransportControllerSend::PostUpdates 配置码率 GoogCcNetworkController::GetPacingRates pacing_factor_默认2.5。也就是说pacer发送报文的码率是探测码率的2.5倍。 PacerConfig GoogCcNetworkController::GetPacingRates(Timestamp at_time) const {// Pacing rate …...

数据可视化工具LightningChart .NET正式发布v10.5.1——拥有全新的3D新功能

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…...

AWS认证SAA-C03每日一题

本题库由云计算狂魔微信公众号分享。 【SAA-C03助理级解决方案架构师认证】A company has a multi-tier application that runs six front-end web servers in an Amazon EC2 Auto Scaling group in a single Availability Zone behind an Application Load Balancer(ALB).A …...

ASP.NET Core MVC -- 将视图添加到 ASP.NET Core MVC 应用

Index页 右键单击“视图”文件夹&#xff0c;然后单击“添加”>>“新文件夹”&#xff0c;并将文件夹命名为“HelloWorld”。 右键单击“Views/HelloWorld”文件夹&#xff0c;然后单击“添加”>“新项”。 在“添加新项 - MvcMovie”对话框中&#xff1a; 在右上…...

基于R做宏基因组结果的PCoA分析

写在前面 因为公司给的PCA结果效果不佳&#xff0c;决定从中重新挑选部分样本进行再分析 步骤 表格结果预处理 在属水平genus参考原本结果已有的PCA图&#xff0c;尽可能挑选距离较远且聚团的样本 选取不同样本属水平的丰度数据&#xff0c;整理成逗号分隔的csv文件 代码…...

8.10 算法刷题【1道题】

8.10 算法刷题 22. 链表中环的入口结点&#xff08;快慢指针&#xff09; 22. 链表中环的入口结点&#xff08;快慢指针&#xff09; 原题链接 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x…...

Apache Maven:从构建到部署,一站式解决方案

目录 一、Maven介绍 1. Maven是什么&#xff1f; 2.Maven的作用&#xff1f; 二、Maven仓库介绍 2.1 库的分类 三、Maven安装与配置 3.1 Maven安装 3.2 Maven环境配置 3.3 仓库配置 四、Eclipse与Maven配置 五、Maven项目测试 5.1 新建Maven项目步骤及注意事项 5.…...

文章四:版本控制策略 - 穿越时光机:Git版本控制进阶技巧

开始本篇文章之前先推荐一个好用的学习工具&#xff0c;AIRIght&#xff0c;借助于AI助手工具&#xff0c;学习事半功倍。欢迎访问&#xff1a;http://airight.fun 概述 版本控制是Git的核心功能&#xff0c;它使得开发者可以记录代码的历史变更&#xff0c;并能够在不同版本…...

爬虫如何应对网站的反爬机制?如何查找user-agent对应的值

import requestsurl https://movie.douban.com/top250 response requests.get(url) # 查看结果 print(response)在requests使用一文中我们有讲到&#xff0c;当状态码不是200时表示爬虫不可用&#xff0c;也就是说我们获取不到网页源代码。但是我们还是可以挣扎一下&#xff…...

一个概率论例题引发的思考

浙江大学版《概率论与梳理统计》一书中的&#xff0c;第13章第1节例2如下&#xff1a; 这个解释和模型比较简单易懂。接下来&#xff0c;第2节的例2是一个关于此模型的题目&#xff1a; 在我自己的理解中&#xff0c;此题的解法跟上一个题目一样&#xff0c;第二级传输后&…...

司徒理财:8.11黄金最新走势分析早盘1914现价多

黄金昨日再次破位新低&#xff0c;但是下跌力度出现衰竭迹象&#xff0c;意味着本次下跌暂时告一段落&#xff0c;行情将会开启一波反弹&#xff0c;早盘1914现价直接多&#xff0c;先看反弹上涨&#xff01;黄金从走势上看&#xff0c;日线上已经跌至前低附近&#xff0c;也是…...

请写一个非对称加密工具 示例包括完整的通信流程

非对称加密工具通常用于保护数据的机密性和身份验证。下面是一个简化的示例&#xff0c;展示了完整的通信流程&#xff0c;包括密钥生成、加密、解密和数字签名验证&#xff1a; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.…...

近地面无人机植被定量遥感与生理参数反演技术

遥感&#xff08;RS-Remote Sensing&#xff09;——不接触物体本身&#xff0c;用传感器收集目标物的电磁波信息&#xff0c;经处理、分析后&#xff0c;识别目标物&#xff0c;揭示其几何、物理性质和相互关系及其变化规律的现代科学技术。 换言之&#xff0c;即是“遥远的感…...

卡巴斯基为基于Linux的嵌入式设备推出专用解决方案

导读卡巴斯基在其卡巴斯基嵌入式系统安全产品中引入了对 Linux 的支持。这种适应性强的多层解决方案现在为基于Linux的嵌入式系统、设备和场景提供优化的安全&#xff0c;合通常适用于这些系统的严格监管标准。 卡巴斯基在其卡巴斯基嵌入式系统安全产品中引入了对 Linux 的支持…...

Word转PDF工具哪家安全?推荐好用的文件格式转换工具

Word文档是我们最常见也是最常用的办公软件&#xff0c;想必大家都知道了Word操作起来十分的简单&#xff0c;而且功能也是比较齐全的。随着科技的不断进步&#xff0c;如今也是有越来越多类型的办公文档&#xff0c;PDF就是其中之一&#xff0c;那么word转pdf怎么转?Word转PD…...

dma_mmap_coherent函数的使用

dma_mmap_coherent函数可以将dma地址映射到用户态&#xff0c;通过应用程序直接操作dma地址。 实现应该分配一段dma地址&#xff0c;例如&#xff1a; buf_addr dmam_alloc_coherent(&pdev->dev, size, &dma_addr, GFP_KERNEL);buf_addr 是内核态的虚拟地址&…...

MySQL_DQL语句(查询语句以及常用函数)

基础查询 不带条件的查询查询多个字段 语法&#xff1a; #查询指定字段的数据 SELECT 字段1, 字段2, 字段3 ... FROM 表名 ; #查询表中全部字段的数据 SELECT * FROM 表名 ;案例&#xff1a;查询表中所有信息数据 SELECT * FROM employee;案例&#xff1a;查询表中姓名和性别…...

一步步教你实现JWT认证和授权

一步步教你实现JWT认证和授权 前言一、引入二、Token认证与JWT认证的关系三、什么是JWT认证&#xff1f;四、JWT的组成1、头部&#xff08;Header&#xff09;2、载荷&#xff08;Payload&#xff09;3、签名&#xff08;Signature&#xff09; 五、JWT认证的工作流程六、代码举…...

【python 深度学习】解决遇到的问题

目录 一、RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb 二、AttributeError: module ‘tensorflow’ has no attribute ‘flags’ 三、conda 更新 Please update conda by running 四、to search for alternate channels that…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...