news 2026/6/10 12:28:20

算法-广度优先搜索-09

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法-广度优先搜索-09

力扣-真题-岛屿数量


我的想法是 初始化一个 sum代表岛屿数量,
没遍历到一个 1, sum = sum + 1
然后从这个位置开始 进行广度优先搜索 把所有相连的1 全部变成0 (原地修改)。 然后再继续向下遍历 。
就能得到所有岛屿数量了。

publicintnumIslands(char[][]grid){intsum=0;for(inti=0;i<grid.length;i++){for(intj=0;j<grid[0].length;j++){if(grid[i][j]=='0')continue;sum++;bfs(grid,i,j);}}returnsum;}publicvoidbfs(char[][]grid,inti,intj){//边界情况if(i>=grid.length||j>=grid[0].length||i==-1||j==-1||grid[i][j]=='0')return;grid[i][j]='0';//四个方向进行遍历bfs(grid,i,j+1);bfs(grid,i+1,j);bfs(grid,i-1,j);bfs(grid,i,j-1);}

嗯, 今天开始加一个环节

复杂度分析

首先空间复杂度 是 O(1) , 因为是原地修改 没有额外的存储空间浪费。
然后时间复杂度计算
咱们拆成几个部分, 首先

  • 第一个部分 肯定就是 两层 for循环遍历
    总共需要遍历 数组的数量m × 单个数组的元素数量n 此
    即 时间复杂度 在这一部分是 O(m×n)
  • 第二部分 也就是最后的一部分就是BFS 遍历
    这一部分的分析 可以这样
    如果 这个 节点是grid[x][y] = ‘0’ 啥也不用处理 O(1)
    如果 这个节点 是 grid[x][y] = ‘1’ 那个 除了 grid[x][y]置为 ‘1’外
    主要就是找相邻的‘1’置为 ‘0’ , 其实某种程度上来说, 你把其他节点 的 ‘1’ 置为 ‘0’ ,不就是帮其他节点做事吗 , 平摊下来 最多 每一个节点都把‘1’置为 ‘0’ , 也就是 在遍历 m× n的时候 顺便加一步 ‘1’置为 ‘0’ 以及 如果是 ‘0’ 跳过的判断, 这个时间复杂度 实际上是 O(1)
    当然啦, 最坏的情况下, grid[0][0】开始 bfs 会直接遍历整个图, 也就是m×n的复杂度。
    所以实际上 BFS的时间复杂度也是O(m×n)

但是这两部分的时间复杂度是分开的,互不影响,总体的时间复杂度就是O(m×n + m×n )= 2O(m×n)
常数因子忽略, 所以最终的时间复杂度就是O(m×n)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 13:46:00

LobeChat能否对接Microsoft Teams?企业通讯软件集成

LobeChat能否对接Microsoft Teams&#xff1f;企业通讯软件集成 在现代企业办公环境中&#xff0c;沟通工具早已不只是“聊天”的载体。像 Microsoft Teams 这样的平台&#xff0c;已经演变为集消息、会议、文档协作和业务流程于一体的数字工作中枢。而与此同时&#xff0c;AI助…

作者头像 李华
网站建设 2026/6/10 11:36:00

第六十二篇-ComfyUI+V100-32G+代码运行Z-Image

环境 系统&#xff1a;CentOS-7 CPU : E5-2680V4 14核28线程 内存&#xff1a;DDR4 2133 32G * 2 显卡&#xff1a;Tesla V100-32G【PG503】 (水冷) 驱动: 535 CUDA: 12.2依赖 pip install diffusers -i https://mirrors.aliyun.com/pypi/simple下载模型 pip install models…

作者头像 李华
网站建设 2026/6/9 18:34:46

空调铝代铜 成本控制与质量隐忧并存

近日&#xff0c;十余家头部家电企业联合签署《空调铝强化应用研究工作组自律公约》&#xff0c;共同推动铝代铜国家标准落地。这一举措旨在应对铜价飙升&#xff08;每吨突破1万美元&#xff09;带来的成本压力&#xff0c;保障产业链安全。不过&#xff0c;铝材替代铜材在空调…

作者头像 李华
网站建设 2026/6/10 11:36:37

nginx的基本认识

什么是nginx&#xff0c; 1.认识nginx 如何认识和操作nginx。 这本身就是一个麻烦的事情 第一层&#xff1a; nginx作为一个linux上的软件&#xff0c;本质上是一个文件夹。 我们可以通过docker来拉取nginx&#xff0c;使用docker来拉取&#xff0c;配置的好处是&#xff0c;可…

作者头像 李华
网站建设 2026/6/10 13:04:16

dubbo的基本认识

如果现在去搜dubbo&#xff0c;其实搜出来一堆&#xff0c;关于如何配置dubbo的技术名词。这个其实不利于深刻理解dubbo的。 那个是细致理解dubbo。 我们不聊技术本身&#xff0c;就聊dubbo给我们项目提供了什么机制&#xff0c;为什么要使用dubbo&#xff0c;怎么使用dubbo&am…

作者头像 李华
网站建设 2026/6/8 16:36:17

创建型、结构型与行为型设计模式的区别

设计模式根据其目的和用途分为创建型、结构型和行为型三种类型&#xff0c;它们的区别如下&#xff1a; 创建型设计模式 目的&#xff1a;主要用于对象的创建过程&#xff0c;将对象的创建和使用分离。其关注点在于如何创建对象&#xff0c;通过特定的方式来控制对象的创建过程…

作者头像 李华