news 2026/5/25 3:09:59

算法-广度优先搜索-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/5/22 13:09:05

Cordova与OpenHarmony运动目标管理系统

欢迎大家加入开源鸿蒙跨平台开发者社区&#xff0c;一起共建开源鸿蒙跨平台生态。 目标驱动的运动 运动目标是激励用户坚持运动的重要因素。通过Cordova框架与OpenHarmony的数据管理能力&#xff0c;我们可以构建一个完整的目标管理系统。本文将介绍这个系统的实现。 目标数据…

作者头像 李华
网站建设 2026/5/22 18:15:55

禁止废话,用人话一句话说清楚CMMI

CMMI 评估就是用业界最佳实践&#xff0c;给企业的真实管理和流程做一次“体检”&#xff0c;看清现在有多成熟、哪里做得好、下一步该怎么改进。&#x1f449; CMMI 用行业最成熟的做法&#xff0c; 给企业的管理和流程做一次“体检”。——&#x1f4cc; 看清 现在到底什么水…

作者头像 李华
网站建设 2026/5/21 14:05:37

设计模式-适配器模式

引言 我们常常会遇到这样的情况&#xff1a;现有的类功能强大&#xff0c;但接口却与我们当前系统的需求不匹配。这就好比你有一把性能卓越的钥匙&#xff08;现有类&#xff09;&#xff0c;但锁眼&#xff08;系统接口需求&#xff09;却对不上。适配器模式就如同一位神奇的工…

作者头像 李华
网站建设 2026/5/22 12:46:27

Audacity音频处理指令由LobeChat智能生成

Audacity音频处理指令由LobeChat智能生成 在播客制作、语言教学或有声书编辑的日常工作中&#xff0c;一个常见的挑战是&#xff1a;如何高效地从长达数小时的录音中提取有效内容&#xff1f;传统方式往往依赖手动选区、反复试错和对软件功能的深度掌握——这不仅耗时费力&…

作者头像 李华
网站建设 2026/5/22 12:49:26

桌游规则说明:LobeChat清晰解释复杂机制

LobeChat&#xff1a;让复杂桌游规则变得清晰易懂 在智能家居设备日益复杂的今天&#xff0c;确保无线连接的稳定性已成为一大设计挑战。不过今天我们不聊硬件&#xff0c;而是把目光转向另一个“复杂系统”——桌面游戏。像《瘟疫危机》《卡坦岛》这类现代桌游&#xff0c;动辄…

作者头像 李华
网站建设 2026/5/23 21:20:06

无人机视觉锁定与目标跟踪技术深度解析(含完整代码)

前言 最近在做一个无人机自主跟踪的项目,踩了不少坑,也积累了一些经验。这篇文章把视觉锁定这块的核心技术点整理一下,从原理到代码实现都会涉及,希望对有类似需求的朋友有所帮助。 视觉锁定说白了就是让无人机"盯住"一个目标不放,听起来简单,实际做起来会遇…

作者头像 李华