LeetCode 0994.腐烂的橘子:广度优先搜索(BFS)

【LetMeFly】994.腐烂的橘子:广度优先搜索(BFS)

力扣题目链接:https://leetcode.cn/problems/rotting-oranges/

在给定的 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] 仅为 01 或 2

解题方法:BFS

首先将腐烂的橘子入队。(每个入队的橘子都被标记为0,假设坏掉消失了,反正它最多“往外感染一次”)

接着当队列非空时:

每次将队列中当前元素全部出队,并尝试向上下左右四个方向腐蚀一个橘子。

若腐蚀成功则新橘子入队(并标记为消失)

每轮腐蚀若成功则“腐蚀时间加一”,直至队列为空,判断是否还有完好的橘子。

  • 时间复杂度 O ( m n ) O(mn) O(mn)
  • 空间复杂度 O ( m n ) O(mn) O(mn)

不知本题数据范围为何这么小。

AC代码

C++
const int directions[4][2] = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};class Solution {
public:int orangesRotting(vector<vector<int>>& grid) {int ans = 0;int cntNormal = 0;queue<int> q;for (int i = 0; i < grid.size(); i++) {for (int j = 0; j < grid[0].size(); j++) {if (grid[i][j] == 1) {cntNormal++;}else if (grid[i][j] == 2) {q.push(i * 10 + j);grid[i][j] = 0;}}}while (q.size()) {bool hasNew = false;for (int i = q.size(); i > 0; i--) {int x = q.front() / 10, y = q.front() % 10;q.pop();for (int d = 0; d < 4; d++) {int tx = x + directions[d][0], ty = y + directions[d][1];if (tx >= 0 && tx < grid.size() && ty >= 0 && ty < grid[0].size() && grid[tx][ty] == 1) {grid[tx][ty] = 0;q.push(tx * 10 + ty);cntNormal--;hasNew = true;}}}ans += hasNew;}return cntNormal ? -1 : ans;}
};
Python
# from typing import ListDIRECTIONS = [[0, -1], [0, 1], [-1, 0], [1, 0]]class Solution:def orangesRotting(self, grid: List[List[int]]) -> int:ans = 0cntNormal = 0q = []for i in range(len(grid)):for j in range(len(grid[0])):if grid[i][j] == 1:cntNormal += 1elif grid[i][j] == 2:q.append((i, j))grid[i][j] = 0while q:hasNew = FalsenewQ = []for x, y in q:for dx, dy in DIRECTIONS:newX, newY = x + dx, y + dyif newX >= 0 and newX < len(grid) and newY >= 0 and newY < len(grid[0]) and grid[newX][newY] == 1:newQ.append((newX, newY))grid[newX][newY] = 0cntNormal -= 1hasNew = Trueq = newQans += hasNewreturn -1 if cntNormal else ans

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/138802167

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

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

相关文章

【Spring】GoF 之代理模式

一、代理模式 在 Java 程序中的代理模式的作用&#xff1a; 当一个对象需要受到保护的时候&#xff0c;可以考虑使用代理对象去完成某个行为 需要给某个对象的功能进行功能增强的时候&#xff0c;可以考虑找一个代理进行增强 A 对象无法和 B 对象直接交互时&#xff0c;也可以…

如何在 Python 中使变量不可继承

1. 问题背景 在 Python 中&#xff0c;子类可以继承父类的属性和方法。但是&#xff0c;有时我们希望子类不能继承父类的某些属性或方法。这种情况下&#xff0c;该如何做呢&#xff1f; 2. 解决方案 解决方案一&#xff1a;使用双下划线前缀 Python 中的双下划线前缀用于表…

仓库管理流程详解(附作业流程图)

仓库管理流程在企业的日常运营中至关重要。它不仅是物资流转的核心环节&#xff0c;更关乎着企业的运营效率、成本控制和客户服务水平。一个高效、规范的仓库管理流程能够确保货物从入库到出库的各个环节有序进行&#xff0c;减少资源浪费和时间成本&#xff0c;同时帮助企业实…

Hive Sampling 抽样函数

Hive Sampling 抽样函数 1.random随机抽样 2.数据块抽样 3.分桶表抽样

【静态分析】软件分析课程实验A2-常量传播和Worklist求解器

Tai-e官网&#xff1a; 概述 | Tai-e 参考&#xff1a; https://www.cnblogs.com/gonghr/p/17979609 -------------------------------------------------------- 1 作业导览 为 Java 实现常量传播算法。实现一个通用的 worklist 求解器&#xff0c;并用它来解决一些数据…

超便捷备忘录共享方法 文字文件都可共享

在这个信息爆炸的时代&#xff0c;备忘录已成为我们生活中不可或缺的小助手。它记录着我们的工作计划、待办事项、灵感闪现&#xff0c;甚至是那些温馨的家庭琐事。然而&#xff0c;当我们在不同的设备间穿梭&#xff0c;如何在手机、电脑&#xff0c;甚至是不同品牌的手机之间…

理解机器学习中的类别不平衡问题

大家好&#xff0c;实际世界的数据集通常是杂乱的,当不同类别之间的样本分布不均匀时&#xff0c;就会出现类别不平衡。或者说&#xff0c;某些类别的样本比其他类别多得多。例如&#xff0c;考虑一个信用卡违约数据集&#xff0c;信用卡违约是一个相对较少发生的事件&#xff…

速锐得深入解析吉利几何CAN总线数据通信网络的拓扑层级框架技术

在现代汽车工业中&#xff0c;车辆的电子控制单元&#xff08;ECU&#xff09;之间的通信至关重要。这种通信大多通过控制器局域网络&#xff08;CAN&#xff09;总线实现&#xff0c;它是德国BOSCH公司于20世纪80年代初开发的一种串行数据通信协议。随着技术的不断进步&#x…

读人工智能时代与人类未来笔记01_重塑人类社会秩序

1. AlphaZero 1.1. 2017年年底&#xff0c;由谷歌旗下DeepMind公司开发的人工智能程序AlphaZero击败了当时世界上最强大的国际象棋程序Stockfish 1.1.1. AlphaZero对Stockfish的百场战绩是28胜72平0负&#xff0c;可以说获得了压倒性的胜利 1.1.2. …

安卓手机数据恢复全攻略:从备份到专业软件一网打尽!

随着科技的飞速发展&#xff0c;我们的生活中越来越离不开手机。然而&#xff0c;在使用手机的过程中&#xff0c;我们可能会遇到数据丢失的问题。对于安卓手机用户来说&#xff0c;如何有效地恢复丢失的数据是一个值得探讨的问题。本文将为您介绍安卓手机数据恢复的全攻略&…

西部首个全域直播基地,打造西部直播基地领军形象

天府锋巢直播产业基地作为西部直播产业的领军者&#xff0c;以其前瞻性的战略布局和卓越的服务体系&#xff0c;正加速推动全域直播的快速发展&#xff0c;助力直播产业实现新升级。该基地作为成都规模最大的直播基地&#xff0c;以加快全域直播为核心目标&#xff0c;通过促进…

利用香港多IP服务器优化网站访问速度的关键策略?

利用香港多IP服务器优化网站访问速度的关键策略? 随着数字化时代的不断发展&#xff0c;网站的全球访问速度成为企业吸引用户、提升竞争力的重要因素。特别对于跨国企业而言&#xff0c;如何确保全球用户都能享受到稳定快速的访问体验显得尤为重要。在这一背景下&#xff0c;…

生成ssl证书并配置到nginx

生成ssl证书并配置到nginx 安装证书生成工具 apt-get update apt install software-properties-common add-apt-repository ppa:certbot/certbot apt-get update apt-get install certbot python3-certbot-nginx生成证书 首先在新网上创建一个A链接&#xff0c;域名与服务器做…

考研OSchap4文件管理chap5磁盘管理(部分)

目录 一、整体认知 1.文件的定义 250 2.文件的属性 251 3.文件内部应该如何被组织(逻辑结构) 256 4.文件之间应该如何被组织起来(目录结构) 252 5.OS应该向上提供哪些功能 253 6.文件应该如何存放在外存中(物理结构) 258 7.OS如何管理外存中的空闲块(存储空间的管理) 25…

牛客Java面试题【面试】

牛客Java面试题【面试】 前言推荐牛客Java面试题【面试】第2章 Java笔面试高频考点&解题技巧1. Java基础[2.1 一、java-基础-1](https://www.nowcoder.com/study/live/689/2/1)1.1 为什么Java代码可以实现一次编写、到处运行&#xff1f;1.2 一个Java文件里可以有多个类吗&…

有必要买超声波洗眼镜机吗?力荐四款实力超群超声波清洗机

在日常生活中&#xff0c;眼镜不仅仅是我们视野的延展&#xff0c;像太阳眼镜&#xff0c;也是有着独特的作用。但是&#xff0c;在每天的使用过程中&#xff0c;眼镜片表面难免会有灰尘&#xff0c;污迹&#xff0c;甚至油渍&#xff0c;这些都会对镜片的材质产生一定的损伤&a…

数据结构-树概念基础知识

根结点&#xff1a;非空树中无前驱节点的结点 结点度&#xff1a;结点拥有的子树数或子节点数或后继节点数 树的度&#xff1a;树内各结点的度的最大值 叶子&#xff1a;终端节点&#xff0c;度为0 祖先&#xff1a;从根到该节点所经分支上的所有结点 子孙&#xff1a;以某结点…

Springboot + xxlJob注意事项

1. 部署 就是这个地址: https://gitee.com/xuxueli0323/xxl-job 由于xxl-job的思想是 调度中心负责调度任务,然后有执行器负责接受调度的信息,然后根据调度,执行任务中的具体逻辑 将 xl-job-admin 启动起来,操作xl-job-admin这个文件夹下的配置文件即可: 创建数据库 执行sql…

外面收费888的CR视频批量剪辑软件短视频去重搬运过豆+去水印批量【剪辑脚本+详细教程】

软件功能&#xff1a; 去水印 加水印 裁剪 画中画 去头尾 加头尾 变速 文本 背景音 画面调整 分辨率 虚化 宫格分屏 旋转 帧率 抽帧 动态缩放 码率调整 合并 分割 专场 镜像重置 补针 定帧 音频抽取 视频抽取 字幕 生成gif 静音移除 画面拼接 图转视频等等 不限制次数&#x…

AICloud 分论坛 07-AI原生数据库与RAG【文档管理】

https://github.com/infiniflow/infinityhttps://infiniflow.org/视频观看&#xff1a;https://www.bilibili.com/video/BV16m411y7xW/?spm_id_from333.999.0.0&vd_sourceae7b192be069682aabc96350ba419fc5 简介 为LLM应用程序构建的AI原生数据库&#xff0c;提供令人难…