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

搜索题目:最短的桥

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目标题和出处标题最短的桥出处934. 最短的桥难度5 级题目描述要求给定一个n × n \texttt{n} \times \texttt{n}n×n的二进制矩阵grid \texttt{grid}grid其中1 \texttt{1}1表示陆地0 \texttt{0}0表示水域。岛是由四面相连的1 \texttt{1}1形成的一个最大组即不会与非组内的任何其他1 \texttt{1}1相连。矩阵grid \texttt{grid}grid中恰好存在两个岛。可以将任意数量的0 \texttt{0}0变为1 \texttt{1}1使两座岛连接组成一个岛。返回必须翻转的0 \texttt{0}0的最小数目。示例示例 1输入grid [[0,1],[1,0]] \texttt{grid [[0,1],[1,0]]}grid [[0,1],[1,0]]输出1 \texttt{1}1示例 2输入grid [[0,1,0],[0,0,0],[0,0,1]] \texttt{grid [[0,1,0],[0,0,0],[0,0,1]]}grid [[0,1,0],[0,0,0],[0,0,1]]输出2 \texttt{2}2示例 3输入grid [[1,1,1,1,1],[1,0,0,0,1],[1,0,1,0,1],[1,0,0,0,1],[1,1,1,1,1]] \texttt{grid [[1,1,1,1,1],[1,0,0,0,1],[1,0,1,0,1],[1,0,0,0,1],[1,1,1,1,1]]}grid [[1,1,1,1,1],[1,0,0,0,1],[1,0,1,0,1],[1,0,0,0,1],[1,1,1,1,1]]输出1 \texttt{1}1数据范围n grid.length grid[i].length \texttt{n} \texttt{grid.length} \texttt{grid[i].length}ngrid.lengthgrid[i].length2 ≤ n ≤ 100 \texttt{2} \le \texttt{n} \le \texttt{100}2≤n≤100grid[i][j] \texttt{grid[i][j]}grid[i][j]为0 \texttt{0}0或1 \texttt{1}1grid \texttt{grid}grid中恰有两个岛解法思路和算法由于一个岛由相邻的陆地连接形成因此只要得到岛上的一个陆地即可使用搜索的方法得到该陆地所在的岛上的所有陆地。由于矩阵中恰有两个岛因此可以首先遍历矩阵得到其中一个岛上的陆地从该陆地开始搜索其所在的岛上的所有陆地然后从已知岛开始搜索未知岛计算两个岛之间的最短距离。从一个陆地开始搜索其所在的岛上的所有陆地可以使用广度优先搜索或深度优先搜索这里使用广度优先搜索。得到已知岛上的所有陆地之后从已知岛上的所有陆地出发执行多源广度优先搜索寻找未知岛搜索过程中记录距离。为了得到最短距离在广度优先搜索的过程中需要将元素分组确保每一轮遍历的元素为同一层的全部待访问元素同一层的全部待访问元素与已知岛的最短距离相同。初始时将已知岛上的所有陆地入队列。每一轮遍历之前需要首先得到队列内的元素个数此时队列内的元素为同一层的全部待访问元素然后访问这些元素并将与这些元素相邻且未访问的水域入队列。一轮遍历结束之后当前层的全部元素都已经出队列并被访问此时队列内的元素为下一层的全部待访问元素下一轮遍历时即可访问下一层的全部待访问元素。该做法可以确保每一轮遍历的元素为同一层的全部待访问元素。具体做法是将距离初始化为− 1 -1−1表示尚未访问任何元素。每一轮遍历时将距离加1 11然后遍历当前层的全部待访问元素对于当前层的每个待访问元素如果存在相邻元素是未访问的水域或陆地执行如下操作。如果相邻元素是未访问的水域则将该水域的状态设为已访问并入队列。如果相邻元素是未访问的陆地则该未访问的陆地属于另一个岛屿此时的距离即为两个岛之间必须翻转的0 00的最小数目返回距离。由于矩阵中恰有两个岛因此一定可以得到两个岛之间必须翻转的0 00的最小数目。代码classSolution{staticint[][]dirs{{-1,0},{1,0},{0,-1},{0,1}};intn;int[][]grid;publicintshortestBridge(int[][]grid){this.ngrid.length;this.gridgrid;inttotaln*n;intstartRow-1,startCol-1;for(inti0;itotal;i){introwi/n,coli%n;if(grid[row][col]1){startRowrow;startColcol;break;}}Listint[]islandgetIsland(startRow,startCol);boolean[][]visitednewboolean[n][n];Queueint[]queuenewArrayDequeint[]();for(int[]cell:island){introwcell[0],colcell[1];visited[row][col]true;queue.offer(cell);}intdistance-1;while(!queue.isEmpty()){distance;intsizequeue.size();for(inti0;isize;i){int[]cellqueue.poll();introwcell[0],colcell[1];for(int[]dir:dirs){intnewRowrowdir[0],newColcoldir[1];if(newRow0newRownnewCol0newColn!visited[newRow][newCol]){if(grid[newRow][newCol]0){visited[newRow][newCol]true;queue.offer(newint[]{newRow,newCol});}else{returndistance;}}}}}return-1;}publicListint[]getIsland(intstartRow,intstartCol){Listint[]islandnewArrayListint[]();boolean[][]visitednewboolean[n][n];visited[startRow][startCol]true;Queueint[]queuenewArrayDequeint[]();queue.offer(newint[]{startRow,startCol});while(!queue.isEmpty()){int[]cellqueue.poll();island.add(cell);introwcell[0],colcell[1];for(int[]dir:dirs){intnewRowrowdir[0],newColcoldir[1];if(newRow0newRownnewCol0newColngrid[newRow][newCol]1!visited[newRow][newCol]){visited[newRow][newCol]true;queue.offer(newint[]{newRow,newCol});}}}returnisland;}}复杂度分析时间复杂度O ( n 2 ) O(n^2)O(n2)其中n nn是矩阵grid \textit{grid}grid的边长。遍历和搜索一个岛需要O ( n 2 ) O(n^2)O(n2)的时间搜索两个岛之间的最短距离也需要O ( n 2 ) O(n^2)O(n2)的时间。空间复杂度O ( n 2 ) O(n^2)O(n2)其中n nn是矩阵grid \textit{grid}grid的边长。使用列表记录一个岛的全部陆地需要O ( n 2 ) O(n^2)O(n2)的空间广度优先搜索使用的队列需要O ( n 2 ) O(n^2)O(n2)的空间。

相关文章:

搜索题目:最短的桥

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目 标题和出处 标题:最短的桥 出处:934. 最短的桥 难度 5 级 题目描述 要求 给定一个 nn\texttt{n} \times \texttt{n}nn 的二进制矩阵 grid\texttt{grid}gri…...

开源免费办公/开发常用软件网站

开源免费办公/开发常用软件网站 办公软件 Google谷歌浏览器 snipaste微软截图工具 多线程下载器 PC资源监控 Office软件: Notepad++ Notepad- - WinRar 7-zip Everything 视频播放器 开发工具 VScode Android Studio ADB Git Cywin Java开发工具 C/C++开发工具 MobaXterm Wire…...

nanobot超轻量级AI助手5分钟部署:Qwen3-4B一键启动,新手也能玩转

nanobot超轻量级AI助手5分钟部署:Qwen3-4B一键启动,新手也能玩转 1. 认识nanobot:你的轻量级AI助手 nanobot是一款革命性的超轻量级个人AI助手,它的设计理念是"小而强大"。相比传统AI助手动辄数十万行的代码量&#x…...

Web相关工具和框架

1、微服务①、定义 微服务:将一个复杂的服务拆分为多个不同功能的小型独立服务,每个微服务专注于单一业务,如用户服务(验证用户信息)、订单服务(处理订单)、支付服务(处理支付&…...

MCP (Model Context Protocol) 深度解析:构建下一世代 AI Agent 的基石

MCP (Model Context Protocol) 深度解析:构建下一世代 AI Agent 的基石 引言 随着大语言模型(LLM)能力的飞速提升,我们正从“聊天机器人”时代迈向“智能 Agent”时代。然而,Agent 面临的一个核心挑战是上下文碎片化&a…...

量化系统MMTP简介-R7

量化交易工具 MMTP R7版本,欢迎大家免费试用。 一、系统介绍 1、支持多账户、多市场同时交易。 2、全C开发,支持跨平台。 3、灵活的对接方式,支持自定义协议转换为本系统定义格式(需额外开发) 4、扩展简单&#xff0c…...

LLM Agents: 从大语言模型到自主智能体的演进与架构解析

LLM Agents: 从大语言模型到自主智能体的演进与架构解析 摘要 随着大语言模型(LLM)能力的飞跃,AI 的角色正在发生根本性的变化。从单纯的“对话机器人”向具备自主决策、环境感知和工具调用能力的“智能代理(Agents)”…...

IDM激活脚本终极指南:2025年免费永久激活的完整解决方案

IDM激活脚本终极指南:2025年免费永久激活的完整解决方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 在2025年,IDM激活脚本&#xff0…...

架构实战:如何构建支持X86/ARM及异构GPU/NPU的跨平台企业级AI视频管理系统?

在安防和视觉AI领域,开发者最头疼的往往不是算法精度,而是底层硬件的碎片化。 当你面对NVIDIA GPU服务器、华为昇腾(Ascend)边缘站、以及基于瑞芯微(Rockchip)或晶晨(Amlogic)的ARM…...

hyperf 数据治理与合规安全一体化:数据分级、血缘、隐私合规、审计追踪、密钥与机密管理。

数据分级 -> 采集最小化 -> 全链路可追踪 -> 审计可回放 -> 密钥集中托管 -> 发布前自动检查。──────────────────────────────下面给你一套完整可落地的方法。---1. 先定总原则(所有技术动作都围绕它)1. …...

推荐一款创新的滚动视图库:PullScrollView

推荐一款创新的滚动视图库:PullScrollView 【免费下载链接】PullScrollView 1.仿照新浪微博Android客户端个人中心的ScrollView,下拉背景伸缩回弹效果。 2.ScrollView仿IOS回弹效果。 项目地址: https://gitcode.com/gh_mirrors/pu/PullScrollView …...

ComfyUI-Impact-Pack终极指南:构建专业级AI图像增强工作流

ComfyUI-Impact-Pack终极指南:构建专业级AI图像增强工作流 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: http…...

别再傻傻分不清了!从手机屏幕的‘尼特’到摄影的‘勒克斯’,一文搞懂光度学与辐射度学

从手机屏幕到摄影灯光:解密光度学与辐射度学的日常应用 每次选购手机时,我们总会被各种参数包围——"峰值亮度1500尼特"、"自动调节至1尼特"、"最低照度0.5勒克斯"。这些看似简单的数字背后,隐藏着两个关键学科…...

从RIS智能超表面到手机5G:最大比合并(MRC)技术是如何让你家网速更稳的?

从智能反射面到5G手机:最大比合并技术如何重塑你的网络体验 每次视频通话卡顿、游戏延迟飙升时,我们总习惯性责怪运营商或路由器,却很少想到手机里那些默默工作的天线阵列正在执行一套精密的信号处理算法。最大比合并(MRC&#xf…...

5分钟搞定 小龙虾 AI OpenClaw v2.6.6 一键安装|办公自动化神器

Windows 一键部署 OpenClaw 教程|5 分钟搞定本地 AI 智能体,告别复杂配置【含最新安装包】 2026 年开源圈备受关注的「数字员工」OpenClaw(昵称小龙虾),GitHub 星标突破 28 万 ,凭借本地运行 零代码操作 …...

WebGL实时折纸模拟技术:如何用GPU并行计算重塑设计工作流?

WebGL实时折纸模拟技术:如何用GPU并行计算重塑设计工作流? 【免费下载链接】OrigamiSimulator Realtime WebGL origami simulator 项目地址: https://gitcode.com/gh_mirrors/or/OrigamiSimulator 在传统3D建模软件还在依赖CPU串行计算的今天&…...

3分钟上手LibreHardwareMonitor:免费开源的硬件监控神器终极指南

3分钟上手LibreHardwareMonitor:免费开源的硬件监控神器终极指南 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor is free software that can monitor the temperature sensors, fan speeds, voltages, load and clock speeds of your computer. 项…...

品牌护城河:在信任稀缺的时代,农业品牌如何赢得人心

在消费升级和食品安全意识日益增强的今天,消费者对农产品和农资产品的品牌信任,正在变得越来越稀缺,也越来越珍贵。营养土行业便是这一趋势的典型写照。过去几年里,我们见证了一些品牌的迅速崛起——它们依靠低价和流量打法&#…...

【C语言】字符串与内存函数(str* /mem* 系列函数)

目录 针对字符串的函数 strlen strcpy strcat strcmp strncpy strncat strncmp strstr strtok strerror 针对字符的函数 字符分类函数 字符转换函数 针对内存的函数 memcpy memmove memcmp memset 针对字符串的函数 strlen 模拟实现 strlen 的方法&#xff…...

绿色循环经济下的农业新范式:让每一株蔬菜的“遗骸”化作新生

在山东临沂的兰陵县,一场关于农业废弃物资源化利用的变革正在发生。曾经令人头疼的农业秸秆和牛粪,如今正成为驱动当地蔬菜育苗产业的全新动力。这一变化的起点,是2023年9月正式投产的生升鸿强基质工厂。这家总投资1.1亿元的工厂,…...

C++、C语言和JAVA开发的区别

1。面向对象没有java彻底。由于C++要兼容C的内容,而C是面向过程的,所以C不可避免地出现过程影子,并不算是完全的面向对象的程序设计语言。例如总得要有main或winmain之类的过程吧。2。C的移植能力没有java好。 由于C的…...

maven常用命令大全

参考地址: 1.maven常用命令大全(附详细解释),https://blog.csdn.net/good_good_xiu/article/details/116740333 2.maven常用命令集合(收藏大全),https://zhuanlan.zhihu.com/p/355889432 3.Maven查看插件信息&#…...

终极指南:如何在5分钟内将图片转换为3D打印模型

终极指南:如何在5分钟内将图片转换为3D打印模型 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left side. 项目…...

2026年,还想要入局大模型领域的学习和工作,还来得及吗?红利期还在吗?

AI这个圈子有一个很神奇的特点:就是复利性基本为零。 每次我看到类似「2026年,入行YYY方向还来得及吗?」的问题的时候,我都会想到这个特点。 原因其实很简单,我只从科研上举一些例子。比方说从2023年之后入行做生成的…...

Amulet-Map-Editor完整功能解析:从世界编辑到格式转换

Amulet-Map-Editor完整功能解析:从世界编辑到格式转换 【免费下载链接】Amulet-Map-Editor A Minecraft world editor and converter that supports all versions since Java 1.12 and Bedrock 1.7. 项目地址: https://gitcode.com/gh_mirrors/am/Amulet-Map-Edit…...

axilite + ap_memory约束数组-突破单口RAM限制

一、在不进行任何说明情况下axilite ap_memory约束数组 1.在这种情况下,会将接口数组综合为内部RAM,不再是单纯的接口了,而是实实在在的要消耗资源的 2.只不过这个RAM对外,这里的对外指的是CPU或者ARM,对外的接口是ax…...

(Linux)进程控制

进程创建 在代码中,进程创建用的是fork函数,调用fork函数后,操作系统会为子进程分配内存块和进程控制块(PCB),并将父进程PCB的部分内容拷贝至子进程。接着,将子进程添加到系统进程列表中&#x…...

ARM架构CNTP_CTL_EL0定时器寄存器详解与应用

1. ARM架构定时器控制寄存器概述在ARMv8/v9架构中,定时器系统是处理器时间管理的关键组件。CNTP_CTL_EL0作为物理定时器的控制寄存器,主要负责EL1(操作系统内核级)的物理定时器控制。这个64位寄存器虽然只使用了最低3位,却承载着定时器状态监…...

用Matlab给信号“搬家”:手把手教你将中频采样数据转为IQ格式(附完整代码)

用Matlab给信号“搬家”:手把手教你将中频采样数据转为IQ格式(附完整代码) 在无线通信系统测试和算法验证中,我们常常会遇到这样的场景:从频谱仪或采集卡获取的中频信号数据(如.mat文件)&#x…...

Material Design Lite图片优化:提升网页性能的终极指南

Material Design Lite图片优化:提升网页性能的终极指南 【免费下载链接】material-design-lite Material Design Components in HTML/CSS/JS 项目地址: https://gitcode.com/gh_mirrors/ma/material-design-lite Material Design Lite是一个轻量级的前端框架…...