LeetCode-994. 腐烂的橘子【广度优先搜索 数组 矩阵】

LeetCode-994. 腐烂的橘子【广度优先搜索 数组 矩阵】

  • 题目描述:
  • 解题思路一:多源广度优先搜索(队列实现)
  • 解题思路二:哈希表实现,先找出所有腐烂和新鲜橘子的集合{}类似于set()。每剔除一次time+=1
  • 解题思路三:0

题目描述:

在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:

值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。

返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。

示例 1:
在这里插入图片描述
输入:grid = [[2,1,1],[1,1,0],[0,1,1]]
输出:4

示例 2:

输入:grid = [[2,1,1],[0,1,1],[1,0,1]]
输出:-1
解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个方向上。

示例 3:

输入:grid = [[0,2]]
输出:0
解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0 。

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 10
grid[i][j] 仅为 0、1 或 2

解题思路一:多源广度优先搜索(队列实现)

观察到对于所有的腐烂橘子,其实它们在广度优先搜索上是等价于同一层的节点的。

假设这些腐烂橘子刚开始是新鲜的,而有一个腐烂橘子(我们令其为超级源点)会在下一秒把这些橘子都变腐烂,而这个腐烂橘子刚开始在的时间是 −1 ,那么按照广度优先搜索的算法,下一分钟也就是第 0 分钟的时候,这个腐烂橘子会把它们都变成腐烂橘子,然后继续向外拓展,所以其实这些腐烂橘子是同一层的节点。那么在广度优先搜索的时候,我们将这些腐烂橘子都放进队列里进行广度优先搜索即可,最后每个新鲜橘子被腐烂的最短时间 dis[x][y] 其实是以这个超级源点的腐烂橘子为起点的广度优先搜索得到的结果。

为了确认是否所有新鲜橘子都被腐烂,可以记录一个变量 cnt 表示当前网格中的新鲜橘子数,广度优先搜索的时候如果有新鲜橘子被腐烂,则 cnt-=1 ,最后搜索结束时如果 cntcntcnt 大于 0 ,说明有新鲜橘子没被腐烂,返回 −1 ,否则返回所有新鲜橘子被腐烂的时间的最大值即可,也可以在广度优先搜索的过程中把已腐烂的新鲜橘子的值由 1 改为 2,最后看网格中是否由值为 1 即新鲜的橘子即可。

class Solution:def orangesRotting(self, grid: List[List[int]]) -> int:m, n = len(grid), len(grid[0])time = 0dirs = [[-1, 0], [0, 1], [1, 0], [0, -1]]queue = deque()# add the rotten orange to the queuefor i in range(m):for j in range(n):if grid[i][j] == 2:queue.append((i, j, time))# bfswhile queue:x, y, time = queue.popleft()for d in dirs:nextx = x + d[0]nexty = y + d[1]if nextx < 0 or nextx >= m or nexty < 0 or nexty >= n:continueif grid[nextx][nexty] == 1:grid[nextx][nexty] = 2queue.append((nextx, nexty, time + 1))# if there are still fresh oranges, return -1for row in grid:if 1 in row: return -1return time

时间复杂度:O(nm)
空间复杂度:O(nm)

解题思路二:哈希表实现,先找出所有腐烂和新鲜橘子的集合{}类似于set()。每剔除一次time+=1

class Solution:def orangesRotting(self, grid: List[List[int]]) -> int:row = len(grid)col = len(grid[0])rotten = {(i, j) for i in range(row) for j in range(col) if grid[i][j] == 2} # 腐烂集合fresh = {(i, j) for i in range(row) for j in range(col) if grid[i][j] == 1}  # 新鲜集合time = 0while fresh:if not rotten: return -1rotten = {(i + di, j + dj) for i, j in rotten for di, dj in [(0, 1), (0, -1), (1, 0), (-1, 0)] if (i + di, j + dj) in fresh} # 即将腐烂的如果在新鲜的集合中,就将它腐烂fresh -= rotten # 剔除腐烂的time += 1return time

时间复杂度:O(nm)
空间复杂度:O(nm)

解题思路三:0


时间复杂度:O(n)
空间复杂度:O(n)

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

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

相关文章

【教学类-09-09】20240406细线迷宫图05(正方形)30格+动物+箭头(15CM横版一页-1份横版)

作品展示&#xff1a; 背景需求&#xff1a; 增加迷宫图的吸引力&#xff0c;起点的地方放一个小动物。 素材准备&#xff1a; 图片来自midjounery文生图&#xff08;四图&#xff09;&#xff0c;但同种动物只留1个&#xff08;如4个老鼠只保留一只老鼠&#xff09;&#xff…

武汉星起航:打造亚马逊一站式孵化平台引领电商新风潮

2020年正式成立后&#xff0c;武汉星起航持续深耕亚马逊自营店铺运营&#xff0c;不断拓展跨境电商业务。公司凭借专业运营团队和多年经验为合作伙伴提供深入合作模式&#xff0c;迅速崭露头角。推出亚马逊一站式孵化平台&#xff0c;为卖家提供全方位支持&#xff0c;彰显了公…

深度学习-计算机视觉入门-part1

计算机视觉入门 文章目录 计算机视觉入门一、 从卷积到卷积神经网络1.图像的基本表示2. 卷积操作3.卷积遇见深度学习3.1 通过学习寻找卷积核3.2 参数共享&#xff1a;卷积带来参数量骤减3.3 稀疏交互&#xff1a;获取更深入的特征 二、手撕卷积代码三、经典CNN模型介绍四、CNN模…

VB 通过COM接口解析PSD文件

最近有PS测评的需求&#xff0c;故而想到了解析psd文件&#xff0c;目的就是为了获取文档信息和图层信息&#xff1b;获取PS的图像信息有很多方式&#xff0c;有过程性的&#xff0c;比如监听PS的各种操作事件&#xff1b;有结果性的&#xff0c;比如本文写的解析PSD文件。 0.…

51单片机入门_江协科技_21.1_开发板USB口连接建议

1. 目前我自己用的普中A2版本的开发板&#xff0c;操作失误导致在开发板连接电脑并通电的情况下误将跳线帽触碰到开发板的3.3V与GND&#xff0c;导致USB口浪涌&#xff0c;2个电脑上面的USB口烧毁&#xff0c;开发板暂时没有任何问题&#xff0c;电脑USB口现在只是接通后有电&a…

信息系统项目管理师——项目工具

直方图 散点图 蒙特卡洛分析 PERT分析 因果图 控制图 帕累托图 持续改进 偏差分析 鱼骨图 工作绩效报告可以包含挣值图表和信息、趋势线和预测、储备燃尽图、缺陷直方图、合同绩效信息以及风险概述信息。可表现为仪表指示图、热点报告、信号灯图或其他形式。 干系人参与度评估…

做抖店的新手朋友!别再盲目跟风个人店了!开通完根本做不起来!

哈喽~我是电商月月 想做抖音小店的朋友们一定要分清个人店和个体店的区别 个人店铺的限制真的太多了&#xff01;真的不好做&#xff01; 一&#xff0e;首先我们要知道两种的区别 个人店不需要营业执照&#xff0c;身份证就能开启 个体店则需要办理营业执照【营业执照的办…

【数据结构与算法】探讨数据结构中的虚拟头节点

&#x1f331;博客主页&#xff1a;青竹雾色间 &#x1f331;系列专栏&#xff1a;数据结构与算法 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 &#x1f331;往期博客 深入浅出&#xff1a;单链表的实现和应用 目录 前言什么是虚拟头节点&#xff1f;虚…

番外篇 | 利用YOLOv5实现视频划定区域目标统计计数

前言:Hello大家好,我是小哥谈。视频划定区域目标统计计数是指在一个给定的视频中,通过划定一个特定的区域,对该区域内的目标进行统计计数的过程。这个过程通常涉及到目标检测和跟踪的技术。本篇文章就以YOLOv5算法为基础,实现视频划定区域目标统计计数!~🌈 目录…

书生·浦语大模型第二期实战营(2)笔记作业

大模型部署 链接: 文档 链接: internstudio 1.部署 InternLM2-Chat-1.8B 模型进行智能对话 2.部署实战营优秀作品 八戒-Chat-1.8B 模型 3.通过 InternLM2-Chat-7B 运行 Lagent 智能体 Demo 4.实践部署 浦语灵笔2 模型 4.1图文写作 4.2图片理解 5.熟悉 huggingface 下载功能…

Mac删除软件,动一动手指,几秒就彻底删除 mac删除软件删不掉的解决方法 mac删除软件后怎么删除软件数据

当你入职新公司&#xff0c;接手前任员工使用的Mac电脑时&#xff0c;很可能会遇到一个非常普遍的问题&#xff1a;电脑中装有大量你不需要的软件。这些软件不仅占用宝贵的硬盘空间&#xff0c;还可能影响电脑的运行速度和效率。为了获得一个干净、清爽的使用体验&#xff0c;删…

Java 开发者必备:JDK 版本详解与选择策略(含安装与验证)

1. JDK 版本 (Oracle Java SE 支持路线图) 数据来源&#xff1a;Oracle Java SE 支持路线图 | 甲骨文中国: https://www.oracle.com/cn/java/technologies/java-se-support-roadmap.html 版本GA DatePremier Support UntilExtended Support Until&#xff08;限 LTS&#xff09…