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

力扣Hot100-994腐烂的橘子

中等

在给定的 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.length
  • n == grid[i].length
  • 1 <= m, n <= 10
  • grid[i][j] 仅为 01 或 2

思路:使用time记录当前的分钟数

由于在找到腐烂水果后直接将它周围的水果置为腐烂水果,但是可能当前轮次腐烂的水果,又在当前轮次中影响周围水果,导致错误,所以可以标记:在不同轮次中被传染腐烂的水果标记为不同的数字,由于一开始time=0时,腐烂水果标记为2,所以在time=0到1这段时间被传染的水果标记为2+time+1,这样就可以使得本轮time=0时不会让标记为3的水果传染它周围的水果

class Solution {// 1:判断第i分钟第一次遇到未腐烂橘子,则time++表示还需要一分钟// 判断橘子完全腐烂时,将flag!=-1;// 当经过两轮剩余的未腐烂个数仍然相同说明不可能腐烂//逻辑错误,在找到腐烂水果后直接将它周围的水果置为腐烂水果,但是可能当前轮次腐烂的水果,又在当前轮次中影响周围水果,导致错误//解决,用不同数字标记,第0轮,为2,则下一轮依次+1
public:
bool in(vector<vector<int>>& grid,int i,int j){return i>=0&&i<grid.size()&&j>=0&&j<grid[0].size();
}int orangesRotting(vector<vector<int>>& grid) {int time = 0;int flag = -1;int good = 0;for (int i = 0; i < grid.size(); i++) {for (int j = 0; j < grid[0].size(); j++) {if (grid[i][j] == 1)good++;}}      if (good == 0)return 0;while (good > 0) {int pre = good; // 该轮未进行前 新鲜的个数for (int i = 0; i < grid.size(); i++) {for (int j = 0; j < grid[0].size(); j++) {if (grid[i][j] ==2+time) { // 有腐烂的橘子,对四周进行判断,有新鲜水果就腐烂if (in(grid,i,j-1)&&grid[i][j - 1] == 1) {grid[i][j - 1] = 2+time+1;good--;}if (in(grid,i,j+1)&&grid[i][j + 1] == 1) {grid[i][j + 1] = 2+time+1;good--;}if (in(grid,i-1,j)&&grid[i - 1][j] == 1) {grid[i - 1][j ] = 2+time+1;good--;}if (in(grid,i+1,j)&&grid[i + 1][j] == 1) {grid[i +1][j ] = 2+time+1;good--;}}}}if (pre == good & good > 0)return -1; // 剩余的不可能腐烂time++;}return time;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 007 | 期权定价与布莱克-斯科尔斯计算
  • git pull 注意事项
  • 【hadoop】常用命令
  • 四、数字图像处理Matlab实验 第二章 数字图像基础
  • 猫头虎推荐:人类通向AGI之路 史上最重磅的20篇论文你值得学习
  • Docker快速入门指南
  • 简单介绍一下 git reflog
  • 10、MySQL-索引
  • centos7 启动python后端服务与停止服务的sh脚本
  • Django 自定义用户 VS 用户资料
  • SpringBoot排除默认日志框架
  • 机器学习知识点全面总结
  • VueRouter的使用
  • 可视化基础的设计四大原则
  • OpenCV图像滤波(5)二维卷积滤波函数filter2D()的使用
  • 【RocksDB】TransactionDB源码分析
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • CSS 提示工具(Tooltip)
  • golang 发送GET和POST示例
  • Js基础知识(一) - 变量
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Linux链接文件
  • NSTimer学习笔记
  • opencv python Meanshift 和 Camshift
  • Spring框架之我见(三)——IOC、AOP
  • Transformer-XL: Unleashing the Potential of Attention Models
  • v-if和v-for连用出现的问题
  • Vue全家桶实现一个Web App
  • 测试开发系类之接口自动化测试
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 对象引论
  • 官方解决所有 npm 全局安装权限问题
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​flutter 代码混淆
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • # 数据结构
  • ###项目技术发展史
  • #QT 笔记一
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (4.10~4.16)
  • (C#)获取字符编码的类
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (每日一问)基础知识:堆与栈的区别
  • (十三)MipMap
  • (算法)求1到1亿间的质数或素数
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转) Android中ViewStub组件使用