当前位置: 首页 > 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)

http://www.lryc.cn/news/335089.html

相关文章:

  • 向上向下采样
  • Leetcode面试经典150_Q169多数元素
  • Spring Cloud微服务入门(五)
  • 负荷预测 | Matlab基于TCN-GRU-Attention单输入单输出时间序列多步预测
  • SpringBoot整合Spring Data JPA
  • 机器学习(五) -- 监督学习(2) -- k近邻
  • 【.NET全栈】ZedGraph图表库的介绍和应用
  • vivado 设计调试
  • Python3 replace()函数使用详解:字符串的艺术转换
  • 【C++】用红黑树封装map和set
  • 一些好玩的东西
  • 微电网优化:基于巨型犰狳优化算法(Giant Armadillo Optimization,GAO)的微电网优化(提供MATLAB代码)
  • java锁
  • QA测试开发工程师面试题满分问答6: 如何判断接口功能正常?从QA的角度设计测试用例
  • vue 双向绑定
  • python--异常处理
  • element-ui result 组件源码分享
  • VRRP虚拟路由实验(思科)
  • SpringBoot通用模块--文件上传开发(阿里云OSS)
  • Fecify 商品标签功能
  • openstack中windows虚拟机时间显示异常问题处理
  • 很牛的一套仓库管理系统,免费复用【带源码】
  • Spark 部署与应用程序交互简单使用说明
  • 【二分查找】Leetcode 点名
  • JS中的运算符
  • Webots常用的执行器(Python版)
  • mySql数据库学习002-表数据查询操作
  • 【STL】stack与queue的底层原理及其实现
  • Ai大模型如何应用到机器视觉系统中
  • IntelliJ IDEA下载及安装教程(Windows操作系统)