LeeCode 994. 腐烂的橘子

原题链接994. 腐烂的橘子 - 力扣(LeetCode)

思路:采用bfs遍历图,将烂橘子加入队列,然后将被烂橘子感染的橘子也加入队列,bfs的具体细节就不多说了,可以自己去搜,很简单,这里主要写本题需要注意的问题。

 第一个时间问题,很多橘子同时感染,如果按照传统的bfs方法去写

是假设是每分钟只有一个橘子变坏,但同时间有很多坏橘子,这些坏的橘子同时影响别的橘子

所以需要改进,这里采用bfs的一个特性,最短路径的记录,过程看图

这样就可以记录那个橘子是什么时候烂的。、

class Solution {

private:int ans = 0;
       int cnt = 0;//新鲜橘子数量
       int time[10][10];//记录橘子是第几分钟腐烂的
       queue<pair<int, int>>q;//同时间有很多坏橘子,这些坏的橘子同时影响别的橘子,所以要记录第一次遍历时遇到的所有坏橘子


public:  void bfs(vector<vector<int>>& grid)
    {
        int dx[4][2] = { -1,0,0,1,1,0,0,-1 };
        
       
        while (!q.empty())
        {
            auto t = q.front();
            q.pop();
            for (int i = 0; i < 4; i++)
            {
                int nex = dx[i][0] + t.first;
                int ney = dx[i][1] + t.second;
                if (nex < 0 || nex >= grid.size() || ney < 0 || ney >= grid[0].size()||time[nex][ney]!=-1||grid[nex][ney]==0)continue;
                time[nex][ney] = time[t.first][t.second] + 1;//bfs特性
                q.push({ nex,ney });
                cnt--;
                ans = time[nex][ney];

                if (cnt==0) {
                    break;
                    
                }

            }
           
        }
    }

    int orangesRotting(vector<vector<int>>& grid) {
        int n = grid.size(), m = grid[0].size();//n是多少行,m是多少列
        memset(time, -1, sizeof(time));//bfs通用操作,先将用不到的点标记为-1
        for(int i=0;i<n;i++)//检测那个橘子烂了
            for (int j = 0; j < m; j++)
            {
                if (grid[i][j] == 2)
                {
                    q.push({ i,j });
                    time[i][j] = 0;//初始烂橘子的时间设为0
                }
                else {
                    if (grid[i][j] == 1)
                    {
                        cnt++;
                    }
                }
            }
        bfs(grid);
        return cnt == 0 ? ans : -1;
          
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【并发编程】-1. 计算机内存架构、JAVA内存模型、Volatile关键字

JAVA内存模型JMM 概述 概念&#xff1a;Java Memory Model (JMM)JAVA内存模型是一种抽象的概念&#xff0c;描述的是一组规范&#xff0c;规范中定义了程序中各个变量&#xff08;实例字段、静态字段、数组对象的组成元素&#xff09;的访问方式&#xff0c;决定了一个线程对…

八皇后00

题目链接 八皇后 题目描述 注意点 每个皇后都不同行、不同列&#xff0c;也不在对角线上“对角线”指的是所有的对角线&#xff0c;不只是平分整个棋盘的那两条对角线 解答思路 本题与N皇后相同&#xff0c;思路仍然是深度优先遍历的同时存储前面每一行选取了哪些列&#…

深圳网页设计收费情况

深圳是中国最具活力和发展速度最快的城市之一&#xff0c;随着经济的快速发展&#xff0c;各种行业都飞速发展&#xff0c;尤其是互联网行业。网页设计是互联网行业的重要组成部分&#xff0c;深圳的网页设计师数量也是非常庞大的。那么&#xff0c;深圳网页设计师的收费情况是…

LLM 推理:Nvidia TensorRT-LLM 与 Triton Inference Server

随着LLM越来越热门&#xff0c;LLM的推理服务也得到越来越多的关注与探索。在推理框架方面&#xff0c;tensorrt-llm是非常主流的开源框架&#xff0c;在Nvidia GPU上提供了多种优化&#xff0c;加速大语言模型的推理。但是&#xff0c;tensorrt-llm仅是一个推理框架&#xff0…

互联网信息服务算法备案流程与要求

一、备案申请的办理流程 企业通过网信办的互联网信息服务算法备案系统&#xff08;https://beian.cac.gov.cn/#/index&#xff09;提交算法备案申请。填报信息包括三部分&#xff0c;分别是算法主体信息、产品及功能信息、算法信息。备案中比较重要的文件包括主体信息中的《落…

如何查看websocket连接信息

Chrome 浏览器中查看 webSocket 连接信息_谷歌浏览器看不到 websocket-CSDN博客 Getting Started — Flask-SocketIO documentation 运作原理 | Socket.IO

Oracle数据库使用指南基本概念

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

不锈钢氩弧焊丝ER316L

说明&#xff1a;TG316L 是超低碳的不锈钢焊丝。熔敷金属耐蚀、耐热、抗裂性能优良。防腐蚀性能良好。 用途:用于石油化工、化肥设备等。也可用于要求焊接后不进行热处理的高Cr钢的焊接。

Android模拟器linux内核的下载,编译,运行,驱动开发测试

Android模拟器linux内核的下载&#xff0c;编译&#xff0c;运行&#xff0c;内核模块开发 1.下载适合Android模拟器的内核 git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/goldfish.git git branch -a git checkout android-goldfish-4.14-gchips 新建一个目录…

Word恢复历史文档,记好4个方法就足够

“我正在准备一个重要的报告&#xff0c;但是电脑突然就崩溃了&#xff0c;导致我的文档还没保存就被关闭了&#xff0c;大家有什么方法可以恢复Word历史文档吗&#xff1f;快给我出出主意吧&#xff01;” 在数字化时代&#xff0c;文档编辑和保存已经成为我们日常工作和学习中…

flink使用StatementSet降低资源浪费

背景 项目中有很多ods层&#xff08;mysql 通过cannal&#xff09;kafka&#xff0c;需要对这些ods kakfa做一些etl操作后写入下一层的kafka&#xff08;dwd层&#xff09;。 一开始采用的是executeSql方式来执行每个ods→dwd层操作&#xff0c;即类似&#xff1a; def main(…

信创产业生态圈各企业分布

文章目录 应用系统&#xff1a;办公管理&#xff1a;云平台网络安全基础软件操作系统数据库中间件 基础硬件芯片 我们国家在前几年提出了信创战略计划&#xff0c;就是为了在信息技术领域&#xff0c;将一些国外牌子的设备和应用、软件逐渐替换成国产的&#xff0c;保证国家的金…

记录samba账号操作日志,增删改查等(安全审计)

说明&#xff1a;windows用户映射samba文件共享服务&#xff0c;记录samba账号的操作日志 只要三步&#xff01; 安装必要软件包 audit配置samba共享配置Syslog 具体步骤 1. 安装必要的软件包 audit 是linux系统的高级审计框架 主要功能&#xff1a;系统调用监控、文件和目…

微前端框架是为了解决项目应用在大型项目中带来的复杂性和维护难题而提出的技术方案。

微前端框架是为了解决单页应用&#xff08;SPA&#xff09;在大型项目中带来的复杂性和维护难题而提出的技术方案。Qiankun.js、MicroApp 和 Wujie 是三种流行的微前端框架。以下是对这三种框架的优缺点分析&#xff1a; Qiankun.js 优点 成熟度高&#xff1a;Qiankun.js 基…

34534534

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

如何高效使用 .http 文件记录和测试API接口

1. 前言 在现代软件开发中&#xff0c;API&#xff08;应用程序接口&#xff09;成为了系统间通信的重要桥梁。.http 文件作为一种轻量级的API请求描述方式&#xff0c;不仅便于开发者记录和分享API接口信息&#xff0c;还能够帮助自动化测试流程。本文将深入介绍如何有效地使…

1. jenkins持续集成交付

jenkins持续集成交付 一、jenkins介绍二、jenkins的安装部署1、下载jenkins2、安装jenkins3、修改插件下载地址4、初始化jenkins 一、jenkins介绍 持续集成交付&#xff0c; CI/CD 偏开发、项目编译、部署、更新 二、jenkins的安装部署 1、下载jenkins [rootjenkins ~]# wge…

公交车载视频监控系统概述

引言 随着城市交通的不断发展&#xff0c;公交车作为城市公共交通的重要组成部分&#xff0c;其安全性和管理效率越来越受到关注。为了提升公交车运营的安全性和管理效率&#xff0c;基于索迪迈视频监控管理平台&#xff0c;结合3G/4G网络技术&#xff0c;我们构建了一套公交车…

【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 同步与通信篇 -- 信号量和互斥锁 --(三)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…