【LeetCode-中等题】994. 腐烂的橘子

news2025/1/20 5:58:41

文章目录

    • 题目
    • 方法一:bfs+层序遍历

题目

在这里插入图片描述

该题值推荐用bfs,因为是一层一层的感染,而不是一条线走到底的那种,所以深度优先搜索不适合

方法一:bfs+层序遍历

广度优先搜索,就是从起点出发,每次都尝试访问同一层的节点,如果同一层都访问完了,再访问下一层,最后广度优先搜索找到的路径就是从起点开始的最短合法路径。

在该题:假设图中只有一个腐烂的橘子,它每分钟向外拓展,腐烂上下左右相邻的新鲜橘子,那么下一分钟,就是这些被腐烂的橘子再向外拓展腐烂相邻的新鲜橘子,这与广度优先搜索的过程均一一对应,上下左右相邻的新鲜橘子就是该腐烂橘子尝试访问的同一层的节点,路径长度就是新鲜橘子被腐烂的时间。
在这里插入图片描述

class Solution {
// 方法一 : bfs   
    int m = 0;
    int n = 0;//  全局 格子宽度和长度
    int minute = 0;//全局  最小分钟数
    int fulash = 0;// 记录1的个数
    public int orangesRotting(int[][] grid) {
       m = grid.length;
       n = grid[0].length;
       Queue<int[]> queue = new LinkedList<>();
       for(int i = 0; i<m ; i++)
       for(int j = 0; j<n ; j++){
           if(grid[i][j] == 1 ) fulash++;//记录新鲜橘子的个数
           if(grid[i][j] == 2 ){
               grid[i][j] = 2;
               queue.offer(new int[]{i,j});//将坏橘子坐标数组 存入队列
               
           }
       }
        //层序遍历
          while(!queue.isEmpty() && fulash > 0){// 当队列空了 或者 没有新鲜橘子了,停止循环
                    int size = queue.size();
                    minute++;// 一层一层的传染,每传染一层,时间+1
                for(int i = 0 ; i<size ;i++){
                   int[] mid = queue.poll();
                   int x = mid[0];
                   int y = mid[1];
                   //上
                   if(x+1 < m && grid[x+1][y]== 1 ){
                       fulash--; // 每传染一个,更新新鲜橘子的数量
                      grid[x+1][y] = 2;//将新鲜果子感染
                      queue.offer(new int[]{x+1,y});//将感染的果子加入队列,进行下一层的处理

                   }
                   //下
                   if(x-1 >=0 && grid[x-1][y]== 1 ){
                         fulash--;
                       grid[x-1][y] = 2;
                       queue.offer(new int[]{x-1,y});
                        
                   }
                   //右
                   if(y+1 < n && grid[x][y+1]== 1 ){
                         fulash--;
                       grid[x][y+1] = 2;
                       queue.offer(new int[]{x,y+1});
                        
                   }
                   //左
                   if(y-1 >=0 && grid[x][y-1]== 1 ){
                         fulash--;
                       grid[x][y-1] = 2;
                       queue.offer(new int[]{x,y-1});  
                   }
            }

                
        }

        if(fulash > 0) return -1;//若还有新鲜橘子  则返回-1
        else  return minute;//无新鲜橘子  则返回minute
    }

}

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

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

相关文章

无涯教程-JavaScript - VARP函数

VARP函数取代了Excel 2010中的VAR.P函数。 描述 该函数根据整个总体计算方差。 语法 VARP (number1,[number2],...)争论 Argument描述Required/OptionalNumber1The first number argument corresponding to a population.RequiredNumber2...Number arguments 2 to 255 cor…

Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】

Go实现LogCollect&#xff1a;海量日志收集系统【上篇——LogAgent实现】 下篇&#xff1a;Go实现LogCollect&#xff1a;海量日志收集系统【下篇——开发LogTransfer】 项目架构图&#xff1a; 0 项目背景与方案选择 背景 当公司发展的越来越大&#xff0c;业务越来越复杂…

Web of Science批量导出

目录 如何用Web of Science检索学术信息问题批量导出 Web of Science检索结果 如何用Web of Science检索学术信息 进入 Web of Science 检索页面&#xff1a; https://www.webofscience.com/wos/woscc/basic-search 根据需求填写过滤条件&#xff0c;点击 search 进入搜索详…

Stable Diffusion---Ai绘画-下载-入门-进阶(笔记整理)

前言 注&#xff1a;本文偏向于整理&#xff0c;都是跟着大佬们学的。 推荐两个b站up主&#xff0c;学完他们俩的东西基本就玩转SD为底的ai绘画&#xff1a; 秋葉aaaki&#xff0c;Nenly同学 1.首先SD主流的就是秋叶佬的Webui了&#xff0c;直接压缩包下载即可&#xff0c;下…

TCP三次握手四次挥手总结

目录 一、两种传输模式&#xff1a; 二、数据方向&#xff1a; 三、端口的作用&#xff1a; 四、端口类型&#xff1a; 五、三次握手&#xff1a; 六、四次断开 常见面试题 TCP&#xff08;Transfer control protocol&#xff09;传输控制协议 一、两种传输模式&#x…

计算机毕业设计 校园二手交易平台 Vue+SpringBoot+MySQL

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师&#xff0c;全栈领域优质创作者。 项目内容…

PYTHON知识点学习-空语句和条件语句

空语句: 虽然条件满足时啥也不做,但是由于python对于语法格式,尤其是缩进和代码块的要求较高,所以如果啥都不写(只写注释)是不符合语法要求的. 报错原因:if后面需要带缩进块------>所以可以使用一个空语句pass进行占位 pass--空语句,无实际意义,啥都不想做时利用它进行占位 …

使用多线程导入大量数据,多线程事物控制

本文主要讲述通过Spring Boot MyBatis做大数据量数据插入的案例和结果 不分批次直接梭哈 MyBatis直接一次性批量插入30万条&#xff0c;代码如下&#xff1a; Test public void testBatchInsertUser() throws IOException {InputStream resourceAsStream Resources.getResou…

Windows配置SonarQube代码审查工具详细步骤(附带IDEA SonarLint插件使用)

文章目录 环境说明以及准备一. SonarQube的下载与安装二. 添加SonarQube项目三. 使用Maven命令上传代码到SonarQube四. IDEA安装SonarLint插件 环境说明以及准备 本篇博客使用的SonarQube版本为9.8&#xff0c;注意JDK 1.8已经不能支持 NameVersionDownLoad LinkSonarQube9.8…

Redis缓存和持久化

目录 Redis缓存 什么是缓存 缓存更新策略​编辑 业务场景 缓存穿透 常见的解决方案 缓存雪崩 解决方案 缓存击穿 解决方案 Redis持久化 RDB持久化 执行时机 RDB方式bgsave的基本流程 AOF持久化 RDB和AOF的对比​编辑 Redis主从 数据同步原理 总结 Redis缓存 …

数学建模:灰色预测模型

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 数学建模&#xff1a;灰色预测模型 文章目录 数学建模&#xff1a;灰色预测模型灰色预测算法步骤代码实现 灰色预测 三个基本方法&#xff1a; 累加数列&#xff1a;计算一阶累加生成数列 x ( 1 ) ( k ) …

Python安装与Pycharm配置

Python与Pycharm安装 用了一年的Python最近被一个问题难倒了&#xff0c;pip安装一直不能用&#xff0c;报错说被另一个程序使用。被逼到只能重新安装python了&#xff0c;正好记录一下这个过程&#xff0c;写这篇笔记。&#xff08;突然想到可能是配Arcgis的python接口&#…

锐捷盒式交换机S5760C版本U盘升级

1.确认设备当前版本信息 2.将升级文件包放置U盘文件夹中&#xff0c; U盘名称123 &#xff0c; 文件夹名称A 3.查看到升级包后&#xff0c;进行U盘升级 #upgrade usb0:/A/S5760X_RGOS12.5(4)B0702P4_install.bin 4.升级成功后 reload交换机 5.等交换机重启完毕&#xff0c;再次…

零基础学Python:元组(Tuple)详细教程

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 Python的元组与列表类似&#xff0c; 不同之处在于元组的元素不能修改, 元组使用小括号,列表使用方括号, 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可 &#x1f447; &#x1f447; &#x1f447; 更…

CXL.mem M2S Message 释义

&#x1f525;点击查看精选 CXL 系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0c…

ubuntu22.04搭建verilator仿真环境

概述 操作系统为 Ubuntu(22.04.2 LTS)&#xff0c;本次安装verilator开源verilog仿真工具&#xff0c;进行RTL功能仿真。下面构建版本为5.008的verilator仿真环境。先看一下我系统的版本&#xff1a; 安装流程 安装依赖 sudo apt-get install git perl python3 make autoc…

UDP/TCP协议报头详细分析

文章目录 ————————预备知识————————数据段netstatpidof—————UDP协议报头即相关概念分析—————UDP协议端格式UDP 特点全双工send / rec 函数的本质UDP的缓冲区基于UDP的应用层协议—————TCP协议报头即相关概念分析—————TCP格式及解析32位序号…

C++ Primer 第3章 字符串、向量和数组

C Primer 第3章 字符串、向量和数组 3.1 命名空间的using声明一、每个名字都需要独立的using声明二、头文件不应包含using声明三、一点注意事项 3.2 标准库类型string3.2.1 定义和初始化string对象一、直接初始化和拷贝初始化 3.2.2 string对象上的操作一、读写string对象二、读…

微信 小程序 在电脑PC端无法加载的解决办法。电脑微信小程序打不开是怎么回事?电脑微信小程序不能打开解决方法教学

一、电脑微信小程序打不开或者一直在加载的原因&#xff1f; 1、电脑端微信版本未更新 微信版本未及时更新&#xff0c;也会影响小程序的正常打开&#xff0c;可以尝试更新版本。 2、缓存过多 如果电脑缓存文件过多&#xff0c;内存少&#xff0c;也可能导致小程序无法流畅…

qt day 5

1>实现闹钟功能 ---------------------------------------------------------------------- .pro ---------------------------------------------------------------------- QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# T…