当前位置: 首页 > news >正文

LeetCode 994—— 腐烂的橘子

阅读目录

    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现

1. 题目

2. 解题思路

  • 1.记录下初始新鲜橘子的位置到 notRotting,我们按照行把二维数组拉成一维,所以,一个vector 就可以实现了;
  • 2.如果没有新鲜橘子,那么第 0 分钟所有橘子已经腐烂,直接返回;
  • 3.如果有新鲜橘子,那么我们遍历每一个新鲜橘子,查看它的上下左右是否有腐烂的橘子,如果有,代表这一分钟这个新鲜橘子会被腐烂,记录到 cur_Rotting,否则,这一分钟这个橘子仍然保持新鲜,记录到 cur_notRotting
  • 4.遍历完后,分钟数增加 1,然后,我们把这一分钟腐烂的橘子对应的位置置为 2;
  • 5.如果这一分钟之后,没有腐烂的橘子总数没有变化,也就是没有橘子被腐蚀,那么跳出循环,因为余下的没有腐烂的橘子永远也不会腐烂了;
  • 6.如果这一分钟有橘子被腐烂,那么,更新未被腐烂的橘子cur_notRottingnotRotting,重复步骤 3-6;
  • 7.如果notRotting为空,代表所有橘子都被腐烂,返回分钟数,否则,有橘子不会被腐烂,返回-1

3. 代码实现

class Solution {
public:int orangesRotting(vector<vector<int>>& grid) {int row = grid.size();int col = grid[0].size();vector<int> notRotting;// 记录初始未腐烂的橘子位置for (int i = 0; i < row; ++i) {for (int j = 0; j < col; ++j) {if (grid[i][j] == 1) {notRotting.push_back(i * col + j);}}}if (notRotting.empty()) {return 0;}int minute = 0;while (!notRotting.empty()) {vector<int> cur_notRotting; // 这一分钟仍然没有腐烂的橘子vector<int> cur_Rotting; // 这一分钟腐烂的橘子for (int k = 0; k < notRotting.size(); ++k) {int i = notRotting[k] / col;int j = notRotting[k] % col;// 上下左右有腐烂的橘子,那么这个新鲜橘子会被腐烂if (i-1 >= 0 && grid[i-1][j] == 2) {cur_Rotting.push_back(notRotting[k]);continue;}if (i+1 < row && grid[i+1][j] == 2) {cur_Rotting.push_back(notRotting[k]);continue;}if (j-1 >= 0 && grid[i][j-1] == 2) {cur_Rotting.push_back(notRotting[k]);continue;}if (j+1 < col && grid[i][j+1] == 2) {cur_Rotting.push_back(notRotting[k]);continue;}// 否则,这个橘子继续保持新鲜cur_notRotting.push_back(notRotting[k]);}// 这一分钟腐烂的橘子更新状态for (int k = 0; k < cur_Rotting.size(); ++k) {int i = cur_Rotting[k] / col;int j = cur_Rotting[k] % col;grid[i][j] = 2;}minute += 1;// 这一分钟没有橘子被腐烂,跳出循环if (cur_notRotting.size() == notRotting.size()) {break;}// 更新未腐烂橘子的位置notRotting = cur_notRotting;}if (!notRotting.empty()) {return -1;} else {return minute;}}
};

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

相关文章:

LeetCode 994—— 腐烂的橘子

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 1.记录下初始新鲜橘子的位置到 notRotting&#xff0c;我们按照行把二维数组拉成一维&#xff0c;所以&#xff0c;一个vector 就可以实现了&#xff1b;2.如果没有新鲜橘子&#xff0c;那么第 0 分钟所有橘子已经…...

向上向下采样

在数字图像处理中&#xff0c;向上采样&#xff08;upsampling&#xff09;和向下采样&#xff08;downsampling&#xff09;是两种常见的操作&#xff0c;用于改变图像的分辨率。 向上采样&#xff08;Upsampling&#xff09;&#xff1a; 向上采样是指增加图像的分辨率&…...

Leetcode面试经典150_Q169多数元素

题目&#xff1a; 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊n/2⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 解题思路&#xff1a; 1. 注意“大于 ⌊n/2⌋”&#xff0c;…...

Spring Cloud微服务入门(五)

Sentinel的安装与使用 安装部署Sentinel 下载Sentinel&#xff1a; https://github.com/alibaba/Sentinel/releases Sentinel控制台 https://localhost:8080 用户和密码为sentinel 使用Sentinel 加依赖&#xff1a; 写配置&#xff1a; 输入&#xff1a; java -Dserver.po…...

负荷预测 | Matlab基于TCN-GRU-Attention单输入单输出时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于TCN-GRU-Attention单输入单输出时间序列多步预测&#xff1b; 2.单变量时间序列数据集&#xff0c;采用前12个时刻预测未来96个时刻的数据&#xff1b; 3.excel数据方便替换&#xff0c;运行环境matlab20…...

SpringBoot整合Spring Data JPA

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容: SpringBoot整合Spring Data JPA 📚个人知识库: Leo知识库,欢迎大家访问 1.…...

机器学习(五) -- 监督学习(2) -- k近邻

系列文章目录及链接 目录 前言 一、K近邻通俗理解及定义 二、原理理解及公式 1、距离度量 四、接口实现 1、鸢尾花数据集介绍 2、API 3、流程 3.1、获取数据 3.2、数据预处理 3.3、特征工程 3.4、knn模型训练 3.5、模型评估 3.6、结果预测 4、超参数搜索-网格搜…...

【.NET全栈】ZedGraph图表库的介绍和应用

文章目录 一、ZedGraph介绍ZedGraph的特点ZedGraph的缺点使用注意事项 二、ZedGraph官网三、ZedGraph的应用四、ZedGraph的高端应用五、、总结 一、ZedGraph介绍 ZedGraph 是一个用于绘制图表和图形的开源.NET图表库。它提供了丰富的功能和灵活性&#xff0c;可以用于创建各种…...

vivado 设计调试

设计调试 对 FPGA 或 ACAP 设计进行调试是一个多步骤迭代式流程。与大多数复杂问题的处理方式一样 &#xff0c; 最好先将 FPGA 或 ACAP 设计调试流程细分为多个小部分 &#xff0c; 以便集中精力使设计中的每一小部分能逐一正常运行 &#xff0c; 而不是尝试一次性让整 个…...

Python3 replace()函数使用详解:字符串的艺术转换

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …...

【C++】用红黑树封装map和set

我们之前学的map和set在stl源码中都是用红黑树封装实现的&#xff0c;当然&#xff0c;我们也可以模拟来实现一下。在实现之前&#xff0c;我们也可以看一下stl源码是如何实现的。我们上篇博客写的红黑树里面只是一个pair对象&#xff0c;这对于set来说显然是不合适的&#xff…...

一些好玩的东西

这里写目录标题 递归1.递归打印数组和链表?代码实现原理讲解二叉树的 前 中 后 序位置 参考文章 递归 1.递归打印数组和链表? 平常我们打印数组和链表都是 迭代 就好了今天学到一个新思路–>不仅可以轻松正着打印数组和链表 , 还能轻松倒着打印(用的是二叉树的前中后序遍…...

微电网优化:基于巨型犰狳优化算法(Giant Armadillo Optimization,GAO)的微电网优化(提供MATLAB代码)

一、微电网优化模型 微电网是一个相对独立的本地化电力单元&#xff0c;用户现场的分布式发电可以支持用电需求。为此&#xff0c;您的微电网将接入、监控、预测和控制您本地的分布式能源系统&#xff0c;同时强化供电系统的弹性&#xff0c;保障您的用电更经济。您可以在连接…...

java锁

乐观锁 乐观锁是一种乐观思想&#xff0c;即认为读多写少&#xff0c;遇到并发写的可能性低&#xff0c;每次去拿数据的时候都认为别人不会修改&#xff0c;所以不会上锁&#xff0c;但是在更新的时候会判断一下在此期间别人有没有去更新这个数据&#xff0c;采取在写时先读出…...

QA测试开发工程师面试题满分问答6: 如何判断接口功能正常?从QA的角度设计测试用例

判断接口功能是否正常的方法之一是设计并执行相关的测试用例。下面是从测试QA的角度设计接口测试用例的一些建议,包括功能、边界、异常、链路、上下游和并发等方面: 通过综合考虑这些测试维度,并设计相应的测试用例,可以更全面地评估接口的功能、性能、安全性、数据一致…...

vue 双向绑定

双向绑定&#xff1a;双方其中一方改变&#xff0c;另外一方也会跟着改变。 data() { return {inputValue: ,list: [],message: hello,checked: true,radio: ,select: [],options: [{text: A, value:{value: A}},{text: B, value:{value: B}},{text: C, value:{value: C}}], }…...

python--异常处理

异常处理 例一&#xff1a; try: #可能出现异常代码 except&#xff1a; #如果程序异常&#xff0c;则立刻进入这儿 [finally: #不管是否捕获异常&#xff0c;finally语法快必须要执行&#xff01;&#xff01;&#xff01; #资源关闭&#xff0c;等各种非常重要的操作&…...

element-ui result 组件源码分享

今日简单分享 result 组件的源码实现&#xff0c;主要从以下三个方面&#xff1a; 1、result 组件页面结构 2、result 组件属性 3、result 组件 slot 一、result 组件页面结构 二、result 组件属性 2.1 title 属性&#xff0c;标题&#xff0c;类型 string&#xff0c;无默…...

VRRP虚拟路由实验(思科)

一&#xff0c;技术简介 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;是一种网络协议&#xff0c;用于实现路由器冗余&#xff0c;提高网络可靠性和容错能力。VRRP允许多台路由器共享一个虚拟IP地址&#xff0c;其中一台路由器被选为Master&#xff0c;负…...

SpringBoot通用模块--文件上传开发(阿里云OSS)

文件上传&#xff0c;是指将本地图片、视频、音频等文件上传到服务器上&#xff0c;可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛&#xff0c;我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件上传服务&#xff0c;需要有存储的支持&#xff0c;那…...

Open-AutoGLM在社交通讯中的应用:自动发微信、刷朋友圈演示

Open-AutoGLM在社交通讯中的应用&#xff1a;自动发微信、刷朋友圈演示 1. 项目概述 1.1 什么是Open-AutoGLM Open-AutoGLM是一款基于视觉语言模型的AI手机智能助理框架。它能通过自然语言指令理解用户需求&#xff0c;自动操控安卓设备完成各种任务。想象一下&#xff0c;只…...

别再手动写Excel了!用Coze+GPT-4o,5分钟把Word需求文档变成测试用例表格

从Word到Excel&#xff1a;零代码打造智能测试用例生成流水线 每次产品需求文档更新后&#xff0c;测试团队最头疼的莫过于手动编写成百上千条测试用例。传统方式下&#xff0c;测试工程师需要反复阅读PRD文档&#xff0c;逐条提取功能点&#xff0c;再按照固定模板填充到Excel…...

如何让你的论文表达直接提升一个等级

在科研写作的道路上&#xff0c;许多科研人员常陷入一种难以言说的困境&#xff1a;明明实验数据详实&#xff0c;研究过程严谨&#xff0c;但落笔成文后&#xff0c;语言却显得平淡无力。文章往往停留在“描述事实”的层面&#xff0c;仅仅机械地陈述“做了什么”和“发现了什…...

基于FPGA的伺服驱动系统:电流环控制与多环路反馈、SVPWM及编码器协议实现的研究

伺服驱动FPGA电流环&#xff0c;包含坐标变换&#xff0c;电流环&#xff0c;速度环&#xff0c;位置环&#xff0c;电机反馈接口&#xff0c;SVPWM&#xff0c;编码器协议&#xff0c;电流环和编码器协议都是FPGA里实现的伺服驱动系统里玩FPGA可不是闹着玩的&#xff0c;尤其是…...

CVPR 2025新秀OverLoCK上手实测:在COCO数据集上跑目标检测,比MogaNet-B高1% AP是怎么做到的?

OverLoCK实战指南&#xff1a;如何在COCO目标检测任务中超越MogaNet-B 1% AP 计算机视觉领域的主干网络架构正在经历一场静默革命。2025年CVPR最新收录的OverLoCK网络以其创新的"先概览再聚焦"设计理念&#xff0c;在多个视觉任务中展现出惊人的性能突破。本文将带您…...

SiameseAOE模型多模态扩展探索:结合图像信息的属性抽取

SiameseAOE模型多模态扩展探索&#xff1a;结合图像信息的属性抽取 最近在做一个项目&#xff0c;需要从一堆产品说明书里自动提取技术参数。这些说明书五花八门&#xff0c;有的是纯文本PDF&#xff0c;有的则是图文混排&#xff0c;甚至有些关键参数就印在产品图片的标签上。…...

等保三级Java安全改造全周期实录,从代码审计到渗透验证的12个生死关卡

第一章&#xff1a;等保三级Java安全改造的合规基线与生命周期全景图等保三级对Java应用提出了覆盖身份鉴别、访问控制、安全审计、通信保密性、代码安全及可信执行环境的全维度要求。其合规基线并非静态清单&#xff0c;而是贯穿需求分析、设计开发、测试验证、上线部署与持续…...

工业以太网双雄:从协议原理到选型落地,EtherCAT与PROFINET实战解析

1. 工业以太网的双雄之争&#xff1a;为什么选型这么难&#xff1f; 第一次接触工业以太网协议选型时&#xff0c;我盯着EtherCAT和PROFINET的参数表发呆了整整一上午。就像面对两个各有所长的武林高手&#xff0c;一个轻功了得&#xff0c;一个内力深厚&#xff0c;实在难以抉…...

Python内存管理策略对比评测报告(2024权威版):仅1种策略通过了金融级SLA压力测试,其余4种已淘汰

第一章&#xff1a;Python智能体内存管理策略对比评测报告&#xff08;2024权威版&#xff09;概述Python智能体&#xff08;如基于LLM的Agent框架、自主任务调度器、多步推理引擎&#xff09;在运行过程中面临高频对象创建、长生命周期缓存、跨线程引用共享等复杂内存场景。传…...

Qwen3-Reranker-8B开源大模型:支持HuggingFace Transformers原生加载

Qwen3-Reranker-8B开源大模型&#xff1a;支持HuggingFace Transformers原生加载 如果你正在构建一个智能搜索系统、问答机器人或者文档分析工具&#xff0c;那么“重排序”这个环节你一定不陌生。简单来说&#xff0c;它就像一个智能裁判&#xff0c;当你的检索系统从海量文档…...