LeetCode994. 腐烂的橘子(2024秋季每日一题 54)

news/2024/11/2 0:34:45/

在给定的 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 = = g r i d . l e n g t h m == grid.length m==grid.length
  • n = = g r i d [ i ] . l e n g t h n == grid[i].length n==grid[i].length
  • 1 < = m , n < = 10 1 <= m, n <= 10 1<=m,n<=10
  • g r i d [ i ] [ j ] grid[i][j] grid[i][j] 仅为 0 0 0 1 1 1 2 2 2

思路:bfs宽度优先遍历)

  • 先将烂橘子所在的坐标都加入队列,并将对应位置时间都置 0
  • 然后通过 bfs 搜索,对搜索到的位置的 4 个方向的新鲜橘子,都标记为烂橘子,然后将时间 + 1,time[a][b] = time[x][y] + 1
  • bfs 搜完之后,遍历所有位置,找到时间最大的烂橘子,如果此时还有新鲜橘子,说明是不能搜到的,返回 -1 即可
class Solution {
public:int time[15][15];queue<pair<int, int>> q;int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};int orangesRotting(vector<vector<int>>& grid) {int n = grid.size(), m = grid[0].size();for(int i = 0; i < n; i++)for(int j = 0; j < m; j++){if(grid[i][j] == 2){time[i][j] = 0;q.push({i, j});}}while(q.size()){auto t = q.front();q.pop();for(int i = 0; i < 4; i++){int a = t.first + dx[i], b = t.second + dy[i];if(a < n && a >= 0 && b >= 0 && b < m && grid[a][b] == 1){time[a][b] = time[t.first][t.second] + 1;grid[a][b] = 2;q.push({a, b});}}}int res = 0;for(int i = 0; i < n; i++)for(int j = 0; j < m; j++){if(grid[i][j] == 1){return -1;}else if(grid[i][j] == 2){res = max(res, time[i][j]);}}return res;}
};

http://www.ppmy.cn/news/1543729.html

相关文章

系统安全架构的深度解析与实践:Java代码实现

引言 系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师&#xff0c;设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解&#xff0c;还需要熟练掌握各种安全技术和工具。本文将详细介绍系统安全架构的概念&#xff0c;并从前后分层、业务切割、…

Flink CDC系列之:学习理解核心概念——Data Pipeline

Flink CDC系列之&#xff1a;学习理解核心概念——Data Pipeline 数据管道sourcesink管道配置Table IDroutetransform案例 数据管道 由于 Flink CDC 中的事件以管道方式从上游流向下游&#xff0c;因此整个 ETL 任务被称为数据管道。 管道对应于 Flink 中的一系列操作。 要描…

【STM32+HAL】STM32CubeMX学习目录

一、基础配置篇 【STM32HAL】微秒级延时函数汇总-CSDN博客 【STM32HAL】CUBEMX初始化配置 【STM32HAL】定时器功能小记-CSDN博客 【STM32HAL】PWM呼吸灯实现 【STM32HAL】DACDMA输出波形实现-CSDN博客 【STM32HAL】ADCDMA采集(单通道多通道)-CSDN博客 【STM32HAL】三重A…

TS 项目中给常用的路径定义一个别名 tsconfig.json

TS 项目中给常用的路径定义一个别名 tsconfig.json 在 TS 项目中&#xff0c;可以定义一些自定义的别名&#xff0c;来取代经常需要引用的一些文件路径。 比如 Vue 项目中你可以需要经常从 /src 中取文件&#xff0c;在每个层级的文件中引用时的相对路径 ../../src ../src 都不…

std::optional与函数返回值的讨论

这个话题是因为&#xff0c;最近一段时间看到有人在问std::optional有什么用&#xff0c;以及不理解为什么要有这个类。所以打算简单介绍一下std::optional&#xff0c;重点讨论返回值相关的内容。 1 std::optional 类模板 std::optional 管理一个可选的包含值&#xff0c;即…

模拟算法 (算法详解+例题)

目录 一、什么是模拟二、模拟算法的特点和技巧三、模拟OJ题3.1、替换所有的问号3.2、提莫攻击3.3、N字形变换3.4、外观数列3.5、数青蛙 一、什么是模拟 模拟是对真实事物或者过程的虚拟。在编程时为了实现某个功能&#xff0c;可以用语言来模拟那个功能&#xff0c;模拟成功也…

分享几款开源好用的图片在线编辑,适合做快速应用嵌入

图片生成器是指一种工具或软件&#xff0c;用于自动生成图片或图像内容&#xff0c;通常依据用户设定的参数或模板进行操作。这种工具能够帮助用户快速创建视觉效果丰富的图像&#xff0c;而无需具备专业的设计技能。 在数字化时代&#xff0c;图片编辑已经成为日常工作和生活的…

【ChatGP】让ChatGPT解释和简化复杂的技术概念

让ChatGPT解释和简化复杂的技术概念 在科技迅速发展的今天&#xff0c;许多人面临着理解复杂技术概念的挑战。无论是初学者还是专业人士&#xff0c;能够轻松理解并运用这些概念都是至关重要的。ChatGPT作为一个强大的语言模型&#xff0c;可以帮助用户解释和简化复杂的技术概…