leecode热题100---994:腐烂的橘子

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

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

返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。
在这里插入图片描述
C++:

//一般当一个对象有多个属性的时候,我们会用结构体stuct写多个属性,而当只有两个属性的时候,就可以使用pair.
//pair<int, int> P;        //对象P有两个属性,都是int类型// 思路:bfs 广度优先搜索 首先将烂橘子坐标全放到队列中去。进而广度优先搜索,进行判定。可以看代码注释。class Solution
{
public:int badorange(vector<vector<int>>& gride){// bfs 广度优先,将腐烂橘子的坐标放到队列中int m = gride.size();int n = gride[0].size();queue<pair<int, int>>q; // 存放腐烂橘子的坐标bool flag = false;      // 记录是否有好橘子,若无则直接返回0int goodnums = 0;for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){if (gride[i][j] == 2){q.push({ i, j });}else if (gride[i][j] == 1){flag = true;goodnums++;      // 好橘子的数量}}}if (!flag)  return 0;int time = 0;while (!q.empty()){int qLen = q.size();flag = false;   // 记录本回合是否有好橘子变烂,若无则可直接返回,时间不进行+1for (int i = 0; i < qLen; i++){[x, y] = q.front();q.pop();// 判断腐烂橘子的上下左右是否有新鲜橘子if (x > 0 && gride[x - 1][y] == 1){flag = true;gride[x - 1][y] = 2;	// 新鲜橘子变烂goodnums--;				// 新鲜橘子-1q.push({ x - 1, y });	// 新的烂橘子坐标}if (x < m - 1 && gride[x + 1][y] == 1){flag = true;gride[x + 1][y] = 2;goodnums--;q.push({ x + 1, y });}if (y > 0 && gride[x][y - 1] == 1){flage = true;gride[x][y - 1] = 2;goodnums--;q.push({ x, y - 1 });}if (y < n - 1 && gride[x][y - 1] == 1){flage = true;gride[x][y - 1] = 2;goodnums--;q.push({ x, y - 1 });}}if (flag = true){time++;}elsebreak;	// 本回合无新鲜橘子变烂,直接返回}if (goodnums == 0){return time;}elsereturn -1;}
};

python:

思路

# 1、先遍历一次数组获取腐烂橘子的位置,以及新鲜橘子的位置分别存在mold和fresh中
# 2、此时若没有mold且没有fresh则证明为空,返回0;若仅没有mold则证明永远不会腐烂,返回-1
# 3、接着遍历mold中的所有坐标,check他们的上下左右,如果在fresh中则该坐标需要从fresh中取出,并且加入mold。
# 4、一轮遍历完成让count++,如果mold此时为空则可以停止,mold中仍有坐标则循环3中的遍历
# 5、返回时检查fresh,如果fresh为空则说明所有橘子已经腐烂,返回count值即可,仍有fresh说明永远有橘子无法腐烂class Solution:def orangesRotting(self, grid):maxi = len(grid)maxj = len(grid[0])count = -1mold = []tmp = []fresh = set()# 遍历grid获取新鲜橘子坐标fresh,腐烂坐标moldfor i in range(maxi):for j in range(maxj):if grid[i][j] == 1:fresh.add((i,j))elif grid[i][j] == 2:mold.append([i,j])# 此时若没有mold且没有fresh则证明为空,返回0;若仅没有mold则证明永远不会腐烂,返回-1if not mold and not fresh: return 0if not mold: return -1# 腐烂橘子的函数def check(i, j):if (i,j) in fresh:fresh.remove((i,j))tmp.append((i,j))# 每轮循环检查mold中坐标的上下左右是否可以腐烂while mold != []:for x in mold:check(x[0]-1,x[1])check(x[0]+1,x[1])check(x[0],x[1]-1)check(x[0],x[1]+1)mold = tmptmp = []count += 1# 如果fresh为空则说明所有橘子已经腐烂,返回count值即可,仍有fresh说明永远有橘子无法腐烂if len(fresh) == 0:return countelse: return -1

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

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

相关文章

【MySQL精通之路】InnoDB(5)-内存结构

总目录&#xff1a; 【MySQL精通之路】InnoDB存储引擎-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】InnoDB(4)-架构图-CSDN博客 目录 ​编辑 1 缓存池&#xff08;Buffer Pool&#xff09; 1.1 缓存池LRU算法 1.2 缓存区配置 1.3 使用InnoDB标准监视器监视缓存池 …

SSRF服务端请求伪造漏洞原理与修复及靶场实践

SSRF服务端请求伪造漏洞原理与修复及靶场实践 SSRF漏洞原理与检测 SSRF&#xff08;Server-Side Request Forgery&#xff0c;服务器端请求伪造&#xff09;漏洞是一种因为服务端提供了远程访问服务&#xff0c;而并未对请求目标进行限制或限制不严格而引起的安全漏洞&#x…

Java Apache Jexl规则引擎初体验

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、模板引擎的选择&#xff1f;二、什么是JEXL规则引擎&#xff1f;优点缺点 三、其他规则引擎四、示例1.引入依赖2.方法示例3、代码解释4、效果![import java…

C++数据结构——哈希表

前言&#xff1a;本篇文章将继续进行C数据结构的讲解——哈希表。 目录 一.哈希表概念 二.哈希函数 1.除留取余法 三.哈希冲突 1.闭散列 线性探测 &#xff08;1&#xff09;插入 &#xff08;2&#xff09;删除 2. 开散列 开散列概念 四.闭散列哈希表 1.基本框架 …

场内期权怎么开户?佣金手续费最低是多少?

今天期权懂带你了解场内期权怎么开户&#xff1f;佣金手续费最低是多少&#xff1f;我国的首个场内期权是50ETF期权&#xff0c;随着投资者对期权产品日渐熟悉&#xff0c;投资者参与数量与交易量稳步增长。 场内期权怎么开户&#xff1f; 满足资金要求&#xff1a;根据监管要…

MyBatis:Parameter Maps collection does not contain value for 报错解决收录

MyBatis&#xff1a;Parameter Maps collection does not contain value for 报错问题解决收录 1.报错收录 后端测试时偶然遇到的用mybatis生成好的mapper文件&#xff0c;报Result Maps collection does not contain value…的错误 2.报错分析 java.lang.ILledalAraumentEx…

必应bing国内广告开户首充和开户费是多少?

微软必应Bing作为国内领先的搜索引擎之一&#xff0c;其广告平台凭借其精准的投放、高效的数据分析和广泛的用户覆盖&#xff0c;已成为众多企业的首选。 根据最新政策&#xff0c;2024年必应Bing国内广告开户预充值金额设定为1万元人民币起。这一调整旨在确保广告主在账户初始…

论文阅读--GLIP

把detection和phrase ground(对于给定的sentence&#xff0c;要定位其中提到的全部物体)这两个任务合起来变成统一框架&#xff0c;从而扩展数据来源&#xff0c;因为文本图像对的数据还是很好收集的 目标检测的loss是分类loss定位loss&#xff0c;它与phrase ground的定位los…

爬虫学习--11.MySQL数据库的基本操作(上)

MySQL数据库的基本操作 创建数据库 我们可以在登陆 MySQL 服务后&#xff0c;使用命令创建数据库&#xff0c;语法如下: CREATE DATABASE 数据库名; 显示所有的数据库 show databases; 删除数据库 使用普通用户登陆 MySQL 服务器&#xff0c;你可能需要特定的权限来创建或者删…

内脏油脂是什么?如何减掉?

真想减的人&#xff0c;减胖是很容易的&#xff0c;但想要形体美又健康&#xff0c;还是得从减内脏油脂开始&#xff0c;那么&#xff0c;问题来了&#xff0c;什么是内脏油脂&#xff1f; 油脂它分部于身体的各个角落&#xff0c;四肢、腹部、腰、臀部、脸、脖子...等&#xf…

VUE3+TS+elementplus创建table,纯前端的table

一、前言 开始学习前端&#xff0c;直接从VUE3开始&#xff0c;从简单的创建表格开始。因为自己不是专业的程序员&#xff0c;编程主要是为了辅助自己的工作&#xff0c;提高工作效率&#xff0c;VUE的基础知识并不牢固&#xff0c;主要是为了快速上手&#xff0c;能够做出一些…

Kubernetes中 Requests 和 Limits 的初步理解

1 灵魂拷问 我们在使用 Kubernetes 时是否遇到以下情况&#xff1a; 你会不会部署负载的时候将 CPU requests/limits 设置得过低或过高&#xff1f;你会不会部署负载的时候将 内存 requests/limits 设置得过低或过高&#xff1f;又或者你根本不设置 requests/limits&#xff…

SVN创建项目分支

目录 背景调整目录结构常规目录结构当前现状目标 调整SVN目录调整目录结构创建项目分支 效果展示 背景 当前自己本地做项目的时候发现对SVN创建项目不规范&#xff0c;没有什么目录结构&#xff0c;趁着创建目录分支的契机&#xff0c;顺便调整下SVN服务器上的目录结构 调整目…

【Vue】Vue2使用ElementUI

目录 Element UI介绍特点Vue2使用Element安装引入ElementUI组件库 使用ElementUI用户注册列表展示其他 mint-ui介绍特点安装组件引入组件Mint-ui相关组件 Element UI 介绍 官网(基于 Vue 2.x ):https://element.eleme.cn/#/zh-CN ElementUI 是一个基于 Vue.js 的桌面端组件库…

Vue文本溢出如何自动换行

css新增 word-break: break-all; word-wrap: break-word;

【Linux系统】文件与基础IO

本篇博客整理了文件与文件系统、文件与IO的相关知识&#xff0c;借由库函数、系统调用、硬件之间的交互、操作系统管理文件的手段等&#xff0c;旨在让读者更深刻地理解“Linux下一切皆文件”。 【Tips】文件的基本认识 文件 内容 属性。文件在创建时就有基本属性&#xff0…

网易:一季度营收269亿元,连续7季研发强度超15%领跑行业

5月23日&#xff0c;网易发布2024年第一季度财报。财报显示&#xff0c;网易Q1营收269亿元&#xff0c;归属于公司股东的净利润85亿元&#xff08;Non-GAAP&#xff09;&#xff0c;以连续7个季度超15%的研发投入强度领跑行业&#xff0c;首季业绩稳健启航。 一季度&#xff0…

JVM学习-动态链接和方法返回地址

动态链接–指向运行时常量池的方法引用 每一个栈帧内部包含一个指向运行时常量池中该栈帧所属方法的引用&#xff0c;包含这个引用的目的为了支持当前方法的代码能够实现动态链接(Dynamic Linking)&#xff0c;如invokednamic指令。在Java源文件被编译到字节码文件中时&#x…

JAVA:浅谈JSON与JSON转换

可能有很多人&#xff0c;无论是前端还是后端&#xff0c;无论是JAVA还是Python还是C&#xff0c;都应该跟JSON这种数据格式打过交道&#xff0c;那么有没有仔细的想过&#xff0c;什么叫JSON&#xff1f; JSON是一种轻量级的数据交换格式。它基于JavaScript语言的对象表示法&a…

初识java——javaSE(6)抽象类与接口【求个关注!】

文章目录 前言一 抽象类1.1 抽象类的概念1.2 抽象类的语法&#xff1a;1.3 抽象类与普通类的区别&#xff1a; 二 接口2.1 接口的概念2.2 接口的语法2.2.1 接口的各个组成2.2.2 接口之间的继承 2.3 接口的实现接口不可以实例化对象 2.4 接口实现多态 三 Object类3.1 Object类是…