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

力扣994. 腐烂的橘子

题目腐烂的橘子https://leetcode.cn/problems/rotting-oranges/description/在给定的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 grid.lengthn grid[i].length1 m, n 10grid[i][j]仅为0、1或2解法多源 BFS广度优先搜索思路将所有初始腐烂的橘子作为 BFS 的起点同时入队并记录它们的位置和时间时间为 0。同时统计新鲜橘子的数量fresh。然后开始 BFS 过程每次从队列中取出一个腐烂橘子检查其四个方向若遇到新鲜橘子则将其腐烂值改为 2新鲜橘子计数减 1并将该橘子入队时间1。BFS 结束后如果fresh 0则返回最后的时间即所有橘子腐烂所需的最大分钟数否则返回 -1。复杂度时间复杂度O(m × n)每个单元格最多入队一次。空间复杂度O(m × n)队列的最大长度。C 代码classSolution{public:intorangesRotting(vectorvectorintgrid){intmgrid.size();intngrid[0].size();queuepairint,intq;// 存储腐烂橘子的坐标intfresh0;// 新鲜橘子数量intminutes0;// 经过的分钟数// 统计新鲜橘子并将腐烂橘子入队for(inti0;im;i){for(intj0;jn;j){if(grid[i][j]1)fresh;elseif(grid[i][j]2)q.push({i,j});}}// 方向数组上、下、左、右intdirs[4][2]{{-1,0},{1,0},{0,-1},{0,1}};// 多源 BFSwhile(!q.empty()fresh0){intsizeq.size();// 每一层一分钟处理for(inti0;isize;i){auto[x,y]q.front();q.pop();for(autod:dirs){intnxxd[0],nyyd[1];if(nx0nxmny0nyngrid[nx][ny]1){grid[nx][ny]2;// 腐烂fresh--;q.push({nx,ny});}}}minutes;// 经过了一分钟}returnfresh0?minutes:-1;}};进阶思考如果网格规模很大如 10^5 × 10^5可以优化空间使用队列存储腐烂橘子坐标同时需要访问网格但网格无法全部加载需要分块处理或使用外部存储。本题中 m,n 很小BFS 即可高效求解。queue 详解std::queue是 C 标准库中的容器适配器提供 FIFO先进先出队列功能。它通常基于std::deque或std::list实现但默认使用std::deque。queue不提供迭代器只能访问队首和队尾元素。一、头文件与模板声明#includequeuetemplateclassT,classContainerstd::dequeTclassqueue;T元素类型。Container底层容器类型必须支持push_back()、pop_front()、front()、back()、size()、empty()等操作。默认为std::dequeT也可使用std::listT。二、构造函数与析构函数函数说明queue()默认构造空队列。queue(const Container cont)用容器cont的副本构造队列。queue(const queue other)拷贝构造。queue(queue other)移动构造。templateclass InputIt queue(InputIt first, InputIt last)(C23)用迭代器范围构造。~queue()析构函数。示例queueintq1;// 空队列queueintq2(q1);// 拷贝构造queueintq3(std::move(q2));// 移动构造三、元素访问函数说明front()返回队首元素的引用第一个元素。back()返回队尾元素的引用最后一个元素。注意调用前需确保队列非空否则行为未定义。示例q.push(1);q.push(2);coutq.front();// 1coutq.back();// 2四、容量函数说明empty()返回队列是否为空。size()返回队列中元素个数。示例if(!q.empty())coutq.size();五、修改器函数说明push(const T value)在队尾添加一个元素拷贝。push(T value)(C11)在队尾添加一个元素移动。emplace(Args... args)(C11)在队尾原地构造一个元素。pop()删除队首元素无返回值。swap(queue other)交换两个队列的内容。示例q.push(10);// 拷贝插入q.emplace(20);// 原地构造q.pop();// 删除队首q.swap(q2);// 交换六、底层容器相关类型别名类型说明container_type底层容器类型如std::dequeT。value_type元素类型。size_type无符号整数类型通常为size_t。reference元素引用类型。const_reference常量元素引用类型。示例queueint::container_type contq._Get_container();// 非标准但某些实现提供七、非成员函数函数说明operator比较两个队列是否相等元素逐个比较。operator!不等。operator字典序小于。operator字典序小于等于。operator字典序大于。operator字典序大于等于。swap(queue, queue)全局交换函数。示例if(q1q2){...}swap(q1,q2);八、完整示例#includeiostream#includequeueintmain(){std::queueintq;// 插入元素q.push(1);q.push(2);q.push(3);// 访问std::coutfront: q.front(), back: q.back()\n;// 1, 3// 遍历需要弹出无法迭代while(!q.empty()){std::coutq.front() ;q.pop();}std::cout\n;// 容量std::coutsize: q.size(), empty: q.empty()\n;// 使用 emplaceq.emplace(4);q.emplace(5);std::coutfront: q.front(), back: q.back()\n;// 4, 5// 交换std::queueintq2;q2.push(10);q2.push(20);q.swap(q2);std::coutafter swap, q front: q.front()\n;// 10return0;}九、总结std::queue是简洁的 FIFO 容器提供基本的入队、出队、访问队首队尾、判空和取大小操作。它不提供迭代器因此无法遍历内部元素而不破坏队列。如果需要遍历可考虑std::deque或std::list直接操作。在 BFS 等算法中queue是核心工具配合push和pop使用。

相关文章:

力扣994. 腐烂的橘子

题目:腐烂的橘子https://leetcode.cn/problems/rotting-oranges/description/在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 0 代表空单元格;1 代表新鲜橘子;2 代表腐烂的橘子。 每分钟,腐…...

ROS2 核心概念与实战应用指南

1. ROS2核心概念解析:从零开始理解机器人开发框架 第一次接触ROS2时,我被它复杂的术语体系搞得晕头转向。直到把机器人项目比作一个餐厅,才突然开窍——节点就像厨师和服务员,话题是传菜窗口,服务是点单对讲机&#xf…...

将Windows 10打造成局域网精准时钟源:NTP服务器配置全攻略

1. 为什么需要局域网NTP服务器? 最近在帮朋友调试一个实验室的监控系统时,遇到了一个典型的时间不同步问题。十几台设备记录的视频时间戳相差从几秒到几分钟不等,排查故障时简直像在玩拼图游戏。这种场景在中小型办公网络、实验室环境特别常见…...

保姆级教程:在Windows上用PyTorch 2.0复现PointNet(含数据集下载与常见坑点修复)

Windows平台PyTorch 2.0实战:从零构建PointNet点云处理模型全指南 当3D点云处理遇上深度学习,PointNet无疑是这个领域的里程碑式架构。不同于传统CNN处理规则网格数据的方式,PointNet开创性地直接处理无序点云数据,在分类和分割任…...

视频抠像技术全解析:基于MatAnyone的动态场景处理与多目标分离方案

视频抠像技术全解析:基于MatAnyone的动态场景处理与多目标分离方案 【免费下载链接】MatAnyone MatAnyone: Stable Video Matting with Consistent Memory Propagation 项目地址: https://gitcode.com/gh_mirrors/ma/MatAnyone 视频抠像技术在影视制作、直播…...

【vue2+onlyoffice】从零搭建文档预览与协同编辑环境

1. OnlyOffice基础认知与版本选择 第一次接触OnlyOffice时,我盯着官网琳琅满目的版本说明发了半小时呆。这就像去买车,销售给你介绍基础版、豪华版、旗舰版,每个版本都说着"更适合企业需求"的套话。经过三个项目的实战验证&#xf…...

LangChain RAG实战:用PGVector把你的本地知识库变成智能问答机器人(Python代码详解)

LangChain RAG实战:用PGVector把你的本地知识库变成智能问答机器人(Python代码详解) 你是否曾经面对堆积如山的本地文档感到无从下手?PDF报告、Markdown笔记、TXT日志散落在各个文件夹,每次查找关键信息都像大海捞针。…...

LM358运放实战:手把手教你搭建电容传感器测量电路(附常见问题排查)

LM358运放实战:手把手教你搭建电容传感器测量电路(附常见问题排查) 在电子设计领域,电容式传感器因其非接触式测量、结构简单和成本低廉等优势,被广泛应用于液位检测、接近开关和湿度测量等场景。而要将微弱的电容变化…...

SillyTavern角色系统深度解析:从基础配置到高级应用

SillyTavern角色系统深度解析:从基础配置到高级应用 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 引言:为什么角色系统是SillyTavern的核心竞争力? 在…...

GHelper技术解析:华硕笔记本轻量级性能优化工具架构与配置指南

GHelper技术解析:华硕笔记本轻量级性能优化工具架构与配置指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models …...

OpenClaw数据标注:用Qwen3-VL:30B增强飞书图像训练集

OpenClaw数据标注:用Qwen3-VL:30B增强飞书图像训练集 1. 为什么需要自动化数据标注 作为一个小型AI团队的算法工程师,我最近遇到了一个典型的数据瓶颈问题:我们需要为垂直领域的图像识别任务构建训练集,但手动标注上千张飞书聊天…...

计算机毕设 java 基于 Javaweb 的家教管理系统 智能家教匹配管理系统 家教服务综合平台

计算机毕设 java 基于 Javaweb 的家教管理系统 f7xm39(配套有源码 程序 mysql 数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联 xi 可分享随着家庭教育需求的不断增长,家教市场规模持续扩大,但传统家教模式…...

大模型学习6-模型量化与推理部署

LLM中的量化技术 本部分将系统介绍如何通过模型量化(Quantization)技术压缩LLM。首先,从量化背景出发,说明当前模型压缩的现实需求;其次,概述深度学习中的通用量化原理;最后,结合LL…...

终极指南:如何用HS2-HF Patch轻松实现Honey Select 2中文本地化

终极指南:如何用HS2-HF Patch轻松实现Honey Select 2中文本地化 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为看不懂Honey Select 2的日文界…...

DanKoe 视频笔记:生产力提升:战术压力与深度工作策略

在本节课中,我们将学习一种结合了“战术压力”与“深度工作”的策略。这套方法帮助一位自称拖延症患者的人在30天内创造了70万美元的收入。我们将拆解其核心原理与具体执行步骤,让初学者也能理解并应用。 概述 拖延常被视为缺点,但本教程提…...

总结各GPU的OpenCL子组洗牌支持情况

penCL 2.0 通过扩展cl_khr_subgroups提供一些基础子组操作支持,包括获取子组 ID、组内 ID 等基本功能,组内断言(any/all)、广播(broadcast)、归约(reduce)、扫描(scan)等基本操作,同时允许一些可选扩展支持更丰富的子组操作(比如洗…...

2026论文写作工具红黑榜:AI论文平台怎么选?一篇看懂

2026年论文写作工具红黑榜出炉,红榜优先选千笔AI、ThouPen、豆包,适配国内学术规范,提升写作效率与合规性;黑榜需避开低质免费工具、无真实引用平台及过度依赖全文生成的工具。选择时建议按需求匹配度 - 数据可信度 - 成本承受力三…...

OpenCV手眼标定避坑指南:inner和outer内参到底怎么选?

OpenCV手眼标定避坑指南:inner和outer内参到底怎么选? 在工业自动化领域,手眼标定(Eye to Hand)是连接视觉系统与机械臂的关键技术环节。许多工程师在使用OpenCV进行标定时,常常对getOptimalNewCameraMatri…...

告别命令行恐惧:用乐鑫官方Flash Download Tool图形化烧录ESP32-S3固件(保姆级图文教程)

告别命令行恐惧:乐鑫Flash Download Tool图形化烧录ESP32-S3全指南 第一次接触ESP32开发板时,那个闪烁的命令行窗口让我手足无措。直到发现乐鑫官方的Flash Download Tool,才发现原来固件烧录可以如此直观简单——不需要记忆任何命令参数&…...

Windows环境下Nacos-Server 2.4.0.1的安装与MySQL配置实战

1. 环境准备与安装包下载 在Windows系统上部署Nacos-Server 2.4.0.1之前,我们需要先做好基础环境准备。这里我建议使用Windows 10或更高版本的操作系统,实测在Windows 7上可能会遇到兼容性问题。首先确保你的机器已经安装了Java 8或Java 11运行环境&…...

OptiScaler:打破显卡技术壁垒——跨平台玩家的AI超分辨率解决方案

OptiScaler:打破显卡技术壁垒——跨平台玩家的AI超分辨率解决方案 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 当你…...

矩阵LED与矩阵按键的扫描驱动原理及实现

1. 矩阵LED与矩阵按键的硬件结构解析 第一次接触矩阵LED和矩阵按键时,我完全被那些交叉的线路搞晕了。后来才发现,它们的本质就是行和列的交叉网络。想象一下围棋棋盘,横线是行,竖线是列,每个交叉点就是一颗棋子——在…...

3分钟学会用Draw.io ECE插件绘制专业级电路图:告别复杂EDA软件

3分钟学会用Draw.io ECE插件绘制专业级电路图:告别复杂EDA软件 【免费下载链接】Draw-io-ECE Custom-made draw.io-shapes - in the form of an importable library - for drawing circuits and conceptual drawings in draw.io. 项目地址: https://gitcode.com/g…...

5大核心功能!植物大战僵尸辅助神器PvZ Toolkit全解析

5大核心功能!植物大战僵尸辅助神器PvZ Toolkit全解析 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit PvZ Toolkit是一款专为植物大战僵尸PC版设计的综合修改器,通过直观的图…...

从零开始掌握KLayout版图设计:5个步骤打造专业集成电路设计流程

从零开始掌握KLayout版图设计:5个步骤打造专业集成电路设计流程 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout KLayout版图设计工具是开源EDA领域的明星产品,为集成电路设计工程师提供了一…...

颠覆式数据主权革命:WeChatMsg如何让你的聊天记录真正归属自己

颠覆式数据主权革命:WeChatMsg如何让你的聊天记录真正归属自己 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

火绒误删explorer.exe导致Win10黑屏?保姆级修复指南(含安全模式+注册表操作)

火绒误删explorer.exe导致Win10黑屏的全面解决方案 当Windows 10系统突然陷入黑屏状态,只剩鼠标指针孤独地在屏幕上闪烁,这种体验对任何用户来说都堪称噩梦。特别是当发现罪魁祸首竟是日常依赖的安全软件火绒时,更让人措手不及。本文将系统性…...

OpenClaw+QwQ-32B成本对比:自建模型如何节省90%API费用

OpenClawQwQ-32B成本对比:自建模型如何节省90%API费用 1. 为什么我要做这次成本实验 去年冬天,当我第一次用OpenClaw对接GPT-4完成月度报表自动化时,账单上的数字让我倒吸一口冷气——连续执行3天的数据整理任务,竟然消耗了价值…...

【AI大模型】在线大语言模型实现与学习具身智能

目录 一、在线大语言模型的核心实现原理 (一)基础模型架构与预训练优化 (二)在线部署与实时交互模块 (三)持续学习与反馈优化模块 二、在线大语言模型学习具身智能的核心路径 (一&#xff…...

Python多解释器冷启动优化:从2.1s到87ms的极致压缩术(附可复用的预热调度器)

第一章:Python多解释器冷启动优化:从2.1s到87ms的极致压缩术(附可复用的预热调度器) 在微服务与Serverless场景中,Python多解释器(如PyO3、subinterpreters或进程级隔离)常因模块导入、C扩展初始…...