图解LeetCode——994. 腐烂的橘子

news2024/12/25 10:15:03

一、题目

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

  • 值 0 代表空单元格
  • 值 1 代表新鲜橘子
  • 值 代表腐烂的橘子

每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。

二、示例

2.1> 示例 1:

输入】grid = [[2,1,1],[1,1,0],[0,1,1]]
输出】4

2.2> 示例 2:

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

2.3> 示例 3:

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

提示:

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

三、解题思路

根据题目描述,我们要计算出单元格中没有新鲜橘子为止所必须经过的最小分钟数。由于腐烂的橘子可以将好的橘子也变腐烂,所以,我们需要采用某种方式,将这种橘子腐烂的轮次模拟计算出来。

这里,我们首先创建一个队列,即:Deque。然后先将矩阵中腐烂的橘子保存到deque中。然后获取deque中存储的腐烂橘子的个数num那么当num个橘子从deque中出栈之后,就表示该轮次执行完毕

那么,当我们从队列deque弹出腐烂的橘子之后,我们会将该烂橘子的的新鲜橘子都变为烂橘子,即:grid[x][y] = 2。然后将刚刚变烂的句子放入到deque中,准备作为后续下一轮需要操作的烂橘子。

那么,需要补充一点的就是,当我们计算矩阵中腐烂橘子的同时,也可以同时获得新鲜的橘子的个数fresh当面当我们发现fresh等于0的时候,则说明所有的好橘子都被腐烂了,返回操作的轮次数;而当我们操作完所有的腐烂橘子,而fresh依然不为0,则说明某些新鲜的橘子是不会被传染腐烂的,则直接返回-1即可。

以上就是本题的解题思路。为了方便大家理解,请参照下图图解即可:

四、代码实现

class Solution {
    int fresh = 0, minute = 0;
    Deque<int[]> deque = new ArrayDeque();
    public int orangesRotting(int[][] grid) {
        int result = 0;
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if (grid[i][j] == 2) deque.addLast(new int[]{i, j});
                if (grid[i][j] == 1) fresh++;
            }
        }
        while (fresh > 0 && !deque.isEmpty()) {
            minute++;
            int nums = deque.size();
            for (int i = 0; i < nums; i++) {
                int[] cell = deque.removeFirst();
                int x = cell[0], y = cell[1];
                rot(grid, x - 1, y); // 查看上方单元格
                rot(grid, x + 1, y); // 查看下方单元格
                rot(grid, x, y - 1); // 查看左侧单元格
                rot(grid, x, y + 1); // 查看右侧单元格
            }
        }
        return fresh > 0 ? -1 : minute; 
    }
    public void rot(int[][] grid, int x, int y) {
        if (x >= 0 && y >=0 && x < grid.length && y < grid[0].length && grid[x][y] == 1) {
            grid[x][y] = 2;
            deque.addLast(new int[]{x, y});
            fresh--;
        }
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

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

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

相关文章

醒醒吧,连新来的实习生都在进阶自动化,你还在点点点吗,聪明人都在提升自己!

5年测试老兵了&#xff0c;真的很迷茫&#xff0c;觉得自己不再提升自己&#xff0c;真的会被实习生替代。 很多朋友跟我吐槽&#xff0c;说自己虽然已经工作3-4年&#xff0c;可工作依旧是点点点&#xff0c;新来的实习生用一周的时间就把工作内容学会了&#xff0c;他的压力…

让博客支持使用 ChatGPT 生成文章摘要是一种什么样的体验?

让博客支持使用 ChatGPT 生成文章摘要是一种什么样的体验&#xff1f; 起因 Sakurairo 主题支持了基于 ChatGPT 的 AI 摘要功能&#xff0c;我有点眼红&#xff0c;但是因为那是个主题限定功能&#xff0c;而我用的又是 Argon&#xff0c;遂想着让 Argon 也支持 AI 摘要功能。…

【spring】spring是什么?详解它的特点与模块

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、spring介绍 二、spring的特点&#xff08;七点&#xff09; 1、简化开发 2、AOP的支持 3、声明式事务的支持 4、方便测试 5、…

springcloud 父项目建立(一)

我们开发项目&#xff0c;现在基本都用到maven&#xff0c;以及用父子项目&#xff0c;以及公共模块依赖&#xff0c;来构建方便扩展的项目体系&#xff1b; 首先我们建立父项目 microservice &#xff0c;主要是一个pom&#xff0c;管理module&#xff0c;以及管理依赖&#x…

shell实现多并发控制

背景&#xff1a; 遇到一个业务需求&#xff0c;一个上位机需要向多个下位机传送文件&#xff0c;当前的实现是for循环遍历所有下位机&#xff0c;传送文件&#xff0c;但是此种方法耗时太久&#xff0c;需要优化。因此可以通过并发的方式向下位机传送文件。 这边写一段测试代…

【Vue3 第二十七章】路由和状态管理

一、路由 1.1 服务端路由 与 客户端路由 服务端路由 服务端路由指的是服务器根据用户访问的 URL 路径返回不同的响应结果。当我们在一个传统的服务端渲染的 web 应用中点击一个链接时&#xff0c;浏览器会从服务端获得全新的 HTML&#xff0c;然后重新加载整个页面。客户端路…

人机交互学习-2 人机交互基础知识

人机交互基础知识 交互框架作用执行/评估活动周期 EEC四个组成部分七个阶段和两个步骤 执行隔阂&评估隔阂扩展EEC模型四个部分两个阶段 交互形式命令行交互菜单驱动界面基于表格的界面直接操纵问答界面隐喻界面自然语言交互交互形式小结 理解用户信息处理模型信号处理机人类…

“秩序与自由”——超详细的低代码开发B端产品前端页面设计规范

Hi&#xff0c;我们是钟茂林和李星潮&#xff0c;来自万应低代码 UI 设计团队。 编辑搜图 编辑搜图 左&#xff1a;钟茂林 右&#xff1a;李星潮 在过去&#xff0c;B 端应用通常只在企业内部员工中使用&#xff0c;与 C 端产品数以千万计的用户相比显得少之…

Pycharm 配置Django 框架(详解篇)

首先你必须具备pycharm 专业版 / 社区版也可以 打开pycharm专业版 找到在最下方菜单栏找到 Terminal 第二步&#xff1a;检查自己的python版本 python --version 第三步&#xff1a; 寻找和自己python版本匹配的django版本 &#xff08;图片来源&#xff1a; 化雨随风 …

【NLP模型】文本建模(2)TF-IDF关键词提取原理

一、说明 tf-idf是个可以提取文章关键词的模型&#xff1b;他是基于词频&#xff0c;以及词的权重综合因素考虑的词价值刻度模型。一般地开发NLP将包含三个层次单元&#xff1a;最大数据单元是语料库、语料库中有若干文章、文章中有若干词语。这样从词频上说&#xff0c;就有词…

华为OD机试真题 JavaScript 实现【最小传输时延】【2023 B卷 100分】,附详细解题思路

一、题目描述 某通信网络中有N个网络节点&#xff0c;用1到N进行标识。 网络通过一个有向无环图表示&#xff0c;其中图的边的值表示结点之间的消息传递时延。 现给定相连节点之间的时延列表times[i] {u,v,w}&#xff0c;u表示源节点&#xff0c;v表示目的节点&#xff0c;…

C++入门攻略

C补足C语言部分缺陷 1.命名空间&#xff1a;1.1 命名空间namespace关键字1.命名空间中可以定义变量、函数、类型2.命名空间可以嵌套3.相同命名空间共存 1.2 命名空间的使用方式&#xff1a;1.名称加用域作用限定符的方式访问&#xff08;同上&#xff09;2.使用using引入某个空…

现在学大数据还来得及么

种一棵树最好的时机是十年前&#xff0c;其次是现在。如果你想学&#xff0c;那么就一定来的及。 Python 已成利器 在大数据领域中大放异彩 Python&#xff0c;成为职场人追求效率的利器&#xff0c;因为不管什么工作&#xff0c;数据都会是工作的一部分&#xff0c;有数据的…

学习【菜鸟教程】【C++ 继承】

链接 1. 教程原文 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类&#xff0c;这使得创建和维护一个应用程序变得更容易。这样做&#xff0c;也达到了重用代码功能和提高执行效率的效果。 当创建一个类时&#xff0c;您不需要重新编写新的…

精通postman教程(一)下载及安装详解

作为一名测试工程师&#xff0c;那么Postman绝对是大伙必备的工具之一。 在这个系列教程中&#xff0c;我将为大伙详细讲解如何使用Postman进行API测试。 今天我将先为大伙介绍Postman的下载安装方法&#xff0c;让你们快速上手这款工具。 一、下载 下载地址&#xff1a;Do…

基于Java学院党员管理系统设计与实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

Java学习笔记(视频:韩顺平老师)4.0

如果你喜欢这篇文章的话&#xff0c;请给作者点赞哟&#xff0c;你的支持是我不断前进的动力。 因为作者能力水平有限&#xff0c;欢迎各位大佬指导。 目录 如果你喜欢这篇文章的话&#xff0c;请给作者点赞哟&#xff0c;你的支持是我不断前进的动力。 控制结构 顺序 分…

【面试系列】2023金三银四面经

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;2022年度博客之星前端领域TOP 2&#xff0c;前端领域优质作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步…

深入浅出RTA广告投放

一、RTA诞生背景 广告主在媒体投放广告时&#xff0c;往往需要将数据回传给DSP或媒体平台&#xff0c;供他们进行针对性优化。但是随着很多公司对数据隐私性的重视和保护&#xff0c;导致广告主不能或者不愿意将数据回传给DSP或媒体平台&#xff0c;但这样做又必然导致投放模型…

Lightroom Classic 2023(版本 12.3)主要新增功能

macw发布了Adobe Lightroom Classic 2023(版本 12.3)软件&#xff0c;该版本新增了哪些功能呢&#xff1f;随着小编一起了解一下吧&#xff01; 主要新增功能概述 轻松消除图像中的杂色 借助 AI 支持的降噪功能&#xff0c;可以轻松、有效地消除 RAW 图像中的杂色&#xff0c…