【LeetCode】每日一题:994.腐烂的橘子

在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:
值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。
返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。

只想到了类似模拟的bfs,没想到答案也是这样做的,感觉有一点点蠢,不过看了官方题解的做法还是有一些可以学习的东西的。

AC代码

class Solution:def orangesRotting(self, grid: List[List[int]]) -> int:m = len(grid)n = len(grid[0])queue = []rott_flag = 0fresh_flag = 0for i in range(m):for j in range(n):if grid[i][j] == 2:rott_flag = 1queue.append((i, j))if grid[i][j] == 1:fresh_flag = 1if rott_flag  == 0 and fresh_flag == 1: return -1 if fresh_flag == 0: return 0res = 0while queue:length = len(queue)for i in range(length):q = queue[0]queue.remove(q)if 0 <= q[0] - 1:if grid[q[0] - 1][q[1]] == 1:queue.append((q[0] - 1, q[1]))grid[q[0] - 1][q[1]] = 2if 0 <= q[1] - 1:if grid[q[0]][q[1] - 1] == 1:queue.append((q[0], q[1] - 1))grid[q[0]][q[1] - 1] = 2if q[0] + 1 < m:if grid[q[0] + 1][q[1]] == 1:queue.append((q[0] + 1, q[1]))grid[q[0] + 1][q[1]] = 2if q[1] + 1 < n:if grid[q[0]][q[1] + 1] == 1:queue.append((q[0], q[1] + 1))grid[q[0]][q[1] + 1] = 2res += 1for i in range(m):for j in range(n):if grid[i][j] == 1:return -1return res - 1            

官方题解

官方题解的主要思路其实是一致的,但是写起来就干净很多。首先是遍历确定queue的初始状态的写法,用两个enumerate可以简写很多;生成器的写法也很值得学习,整体代码很清爽。以及事实上只需要判断最后是否有新鲜橘子即可,不需要在上面多判断一次。

class Solution:def orangesRotting(self, grid: List[List[int]]) -> int:R, C = len(grid), len(grid[0])# queue - all starting cells with rotting orangesqueue = collections.deque()for r, row in enumerate(grid):for c, val in enumerate(row):if val == 2:queue.append((r, c, 0))def neighbors(r, c) -> (int, int):for nr, nc in ((r - 1, c), (r, c - 1), (r + 1, c), (r, c + 1)):if 0 <= nr < R and 0 <= nc < C:yield nr, ncd = 0while queue:r, c, d = queue.popleft()for nr, nc in neighbors(r, c):if grid[nr][nc] == 1:grid[nr][nc] = 2queue.append((nr, nc, d + 1))if any(1 in row for row in grid):return -1return d

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

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

相关文章

网安面经之文件包含漏洞

一、文件包含漏洞 1、文件包含漏洞原理&#xff1f;危害&#xff1f;修复&#xff1f; 原理&#xff1a;开发⼈员⼀般希望代码更灵活&#xff0c;所以将被包含的⽂件设置为变量&#xff0c;⽤来进⾏动态调⽤&#xff0c;但是由于⽂件包含函数加载的参数没有经过过滤或者严格的…

LVDS 源同步接口

传统数据传输通常采用系统同步传输方式&#xff0c;多个器件基于同一时钟源进行系统同步&#xff0c;器件之间的数据传输时序关系以系统时钟为参考&#xff0c;如图1所示。系统同步传输方式使各器件处于同步工作模式&#xff0c;但器件之间传输数据的传输时延难以确定&#xff…

图解JVM出现的参数

参数说明-XX:UseParNewGC使用ParNew作为垃圾回收器-XX:HandlePromotionFailure设置如果老年代内存<新生代所有对象大小时要不要Full GC&#xff0c;如果没设置就要Fuul GC&#xff0c;设置了就不要Full GC&#xff0c;而是进一步检查。-Xmx, -Xms, -Xmn, -XX:PermSize, -XX:…

火山引擎VeDI:A/B测试平台指标能力升级,助力企业提升精细化运营效率

在数字化浪潮的推动下&#xff0c;数据分析与精细化运营已成为企业提升竞争力的关键。近日&#xff0c;火山引擎A/B测试DataTester完成了指标能力的全面升级&#xff0c;为企业在流量竞争激烈的市场中提供了更强大、更可信的数据支持。 此次升级亮点在于引入了“按某个属性去重…

局域网内访问vue3项目|Network: use --host to expose

背景 我希望在相同的局域网内&#xff0c;通过手机访问我在Vue 3项目中展示的效果 遇到的问题 使用Vue CLI的–host选项实现局域网内的应用程序测试 当使用Vue CLI在本地提供服务时&#xff0c;通过使用 --host 选项&#xff0c;你可以指定要公开应用程序的主机。默认情况下&a…

[Linux] 入门指令详解

目录 ls指令 pwd指令 whoami指令 cd指令 clear指令 touch指令 mkdir指令 rmdir指令 rm指令 man指令 cp指令 mv指令 cat指令 tac指令 more指令 less指令 head指令 tail指令 拓展&#xff1a;如何读取文件中间某一段内容&#xff1f; date指令 cal指令 fin…

代码随想录阅读笔记-动态规划【爬楼梯】

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 示例 1&#xff1a; 输入&#xff1a; 2输出&#xff1a; 2解释&#xff1a; 有两种方法可以爬到楼…

Ubuntu上使用audit2allow解决Android Selinux问题

1.安装工具 sudo apt install policycoreutils 2.运行命令 提前用dmesg或者串口抓取kernel log 遇到错误&#xff0c;提示需要用-p指定policy file&#xff0c;然偶尝试创建一个policy空文件&#xff0c;用-p选项&#xff0c;遇到如下错误 3.规避问题 首先跟进错误log的堆栈…

快速安装redis各种版本

要在AlmaLinux 9.3 (Shamrock Pampas Cat)上通过rpm包安装Redis&#xff0c;可以考虑使用Remi存储库&#xff0c;这是一个广泛用于安装较新版本PHP和数据库软件的第三方存储库。以下是安装Redis的步骤&#xff1a; 1. 添加Remi存储库 首先&#xff0c;需要启用EPEL存储库&…

vue2响应式和vue3响应式

vue2响应式是基于Object.defineProperty实现的,在生命周期钩子函数beforeCreate,created之间收集依赖&#xff0c;将data中的每个属性递归设置上Object.definePropertyvue3响应式是基于ES6 Proxy 在生命周期钩子函数beforeCreate和created之间将data属性直接设置proxy&#xff…

C语言每日一题—约瑟夫问题

13个人围成一圈&#xff0c;从第1个人开始顺序报号1、2、3&#xff0c;凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。要求用结构体编程实现。***输出提示&#xff1a;"\n出圈成员及顺序&#xff1a;" ***输出格式&#xff1a;"%3d" ***输出提示…

C++指针和动态内存分配细节,反汇编,面试题05

文章目录 20. 指针 vs 引用21. new vs malloc 20. 指针 vs 引用 指针是实体&#xff0c;占用内存空间&#xff0c;逻辑上独立&#xff1b;引用是别名&#xff0c;与变量共享内存空间&#xff0c;逻辑上不独立。指针定义时可以不初始化&#xff1b;引用定义时必须初始化。指针的…

mmdetection在训练自己数据集时候 报错‘ValueError: need at least one array to concatenate’

问题&#xff1a; mmdetection在训练自己数据集时候 报错‘ValueError: need at least one array to concatenate’ 解决方法&#xff1a; 需要修改数据集加载的代码文件&#xff0c;数据集文件在路径configs/base/datasets/coco_detection.py里面&#xff0c;需要增加meta…

【GD32F470紫藤派使用手册】第五讲 PMU-低功耗实验

5.1 实验内容 通过本实验主要学习以下内容&#xff1a; PMU原理&#xff1b; 低功耗的进入以及退出操作&#xff1b; 5.2 实验原理 5.2.1 PMU结构原理 PMU即电源管理单元&#xff0c;其内部结构下图所示&#xff0c;由该图可知&#xff0c;GD32F4xx系列MCU具有三个电源域…

驱动丹佛斯比例电磁铁放大器

驱动丹佛斯比例电磁铁是一种用于实现对液压系统连续且精确控制的通电带磁性装置。比例阀由直流比例电磁铁和液压阀两部分组成。其中&#xff0c;比例电磁铁是其核心部件&#xff0c;负责将输入的电信号转换成力和位移输出&#xff0c;从而控制液压阀的工作状态。比例电磁铁通过…

c语言实现十进制(整数,小数)转N进制

文章目录 先来说一下整数转N进制小数转N进制栈和队列代码地址← 今天实现了c语言整数和小数转换为对应的N进制 先来说一下整数转N进制 我们只需要不断的取模然后判断num/N是否等于0就可以了,同时我们还要保存每一组的余数 这里我们的余数是从下往上输出的,是不是就相当于后算出…

海外盲盒小程序:探索世界,发现无限可能

在数字时代&#xff0c;我们渴望突破地域的界限&#xff0c;体验不同文化&#xff0c;感受世界的多彩。为了满足这一需求&#xff0c;我们隆重推出“海外盲盒小程序”——一个让你足不出户&#xff0c;就能探索世界、发现无限可能的神奇平台。 一、独特的盲盒体验 打开“海外盲…

[力扣题解]45. 跳跃游戏 II

题目&#xff1a;45. 跳跃游戏 II 思路 贪心法&#xff1b; 只需记录2个变量&#xff0c;当前点能达到的最远距离&#xff0c;和上一步能到达的最远距离&#xff1b; &#xff08;真有意思&#xff0c;代码随想录给出的是curDistance&#xff0c;nextDistance2个&#xff0c;…

NetApp数据恢复—WAFL文件系统下raid数据恢复案例

NetApp存储数据恢复环境&故障&#xff1a; 某公司NetApp存储设备&#xff0c;人为误操作导致NetApp存储内部分重要数据被删除&#xff0c;该NetApp存储采用WAFL文件系统&#xff0c;底层是由多块硬盘组成的raid阵列。 NetApp存储数据恢复过程&#xff1a; 1、将NetApp存储设…

VBA在Excel中注册登录界面的应用

VBA在Excel中注册登录界面的应用(V潘谆白说VBA) 文章目录 前言一、如何注册登录?二、注册登录界面截图三、操作思路四、运行代码1.注册2.登录3.注册登录界面赋值4.隐藏工作表方法5.显示工作表方法6.打开、关闭工作薄前操作前言 Excel工作表也可以像其他小程序一样,输入账号…