Leetcode春季打卡第四天:994. 腐烂的橘子

Leetcode春季打卡第四天:994. 腐烂的橘子

思路

  1. 思路是采用广度优先搜索,一层一层遍历。
  2. 首先先扫描矩阵,将坏橘子放进队列,记录正常橘子的个数。
  3. 正常橘子个数为零,直接返回0
  4. 不为零就开始BFS
  5. 开始按层数层序遍历,将队列里的坏橘子放出来,去找会被污染的正常橘子,将其加入队列。
  6. 每次正常橘子加入队列更新矩阵情况,并将正常橘子的个数减一
  7. 每历遍完一层,更新需要的时间,自加
  8. 返回答案,如果正常橘子全军覆没,返回污染时间,没有全军覆没,返回-1

Talk is cheap . Show me the code .

class Solution {
public:
int x[4]={1,0,-1,0};
int y[4]={0,1,0,-1};
int orangesRotting(vector<vector<int>>& grid) {
int good_cnt=0,min=-1,size=0;
queue<pair<int,int>> bad;
pair<int,int> temp;
for(int i=0;i<grid.size();i++){
for(int j=0;j<grid[i].size();j++){
if(grid[i][j]==2){
temp=make_pair(i,j);
bad.push(temp);
}else if(grid[i][j]==1) good_cnt++;
}
}
if(good_cnt==0) return 0;
while(!bad.empty()){
size=bad.size();
while(size--){
temp=bad.front();bad.pop();
for(int i=0;i<4;i++){
if(temp.first+x[i]>=0&&temp.first+x[i]<grid.size()&&temp.second+y[i]>=0&&temp.second+y[i]<grid[temp.first].size()){
if(grid[temp.first+x[i]][temp.second+y[i]]==1){
pair<int,int> point(temp.first+x[i],temp.second+y[i]);
bad.push(point);
grid[temp.first+x[i]][temp.second+y[i]]=2;
good_cnt--;
}
}
}
}
min++;
}
return good_cnt==0?min:-1;
}
};

Leetcode春季打卡第四天:994. 腐烂的橘子的更多相关文章

  1. Leetcode春季打卡活动 第二题:206. 反转链表

    Leetcode春季打卡活动 第二题:206. 反转链表 206. 反转链表 Talk is cheap . Show me the code . /** * Definition for singl ...

  2. Leetcode 春季打卡活动 第一题:225. 用队列实现栈

    Leetcode 春季打卡活动 第一题:225. 用队列实现栈 Leetcode 春季打卡活动 第一题:225. 用队列实现栈 解题思路 这里用了非常简单的思路,就是在push函数上做点操作,让队头总 ...

  3. Leetcode之广度优先搜索(BFS)专题-994. 腐烂的橘子(Rotting Oranges)

    Leetcode之广度优先搜索(BFS)专题-994. 腐烂的橘子(Rotting Oranges) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ar ...

  4. leetcode 994.腐烂的橘子

    题目: 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂 ...

  5. Leetcode春季活动打卡第三天:面试题 10.01. 合并排序的数组

    Leetcode春季活动打卡第三天:面试题 10.01. 合并排序的数组 Leetcode春季活动打卡第三天:面试题 10.01. 合并排序的数组 思路 这道题,两个数组原本就有序.于是我们采用双指针 ...

  6. LeetCode第十八题-四数之和

    4Sum 问题简介:定n个整数和整数目标的数组nums,是否有元素a,b,c,d在nums中,使a+b+c+d=target? 举例: 给定数组 nums = [1, 0, -1, 0, -2, 2] ...

  7. LeetCode(18):四数之和

    Medium! 题目描述: 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 t ...

  8. [LeetCode] 651. 4 Keys Keyboard 四键的键盘

    Imagine you have a special keyboard with the following keys: Key 1: (A): Print one 'A' on screen. Ke ...

  9. leetcode 签到 914. 卡牌分组

    题目 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 X ...

随机推荐

  1. C# 强行锁定 第三方 外部 应用程序窗体窗口的分辨率尺寸大小 禁止鼠标拖拽改变窗口大小

    我们也许会有一些奇怪的需求,比如说禁止一个外部程序的窗口大小更改. 如果我们没法修改外部程序的代码,那要怎么做呢? 当然,我们可以通过DLL注入目标程序的方式去Hook或registry一个事件来检测 ...

  2. 狂神说JUC学习笔记(二)

    狂神说JUC的原版笔记: 链接:https://pan.baidu.com/s/12zrGI4JyZhmkQh0cqEO4BA 提取码:d65c 我的笔记在狂神的笔记上增加了一些知识点或者做了些许补充 ...

  3. .NET平台系列27:在 Linux 上安装 .NET Core/.NET5/.NET6

    系列目录     [已更新最新开发文章,点击查看详细] .NET 在不同的 Linux 发行版上可用. 大多数 Linux 平台和发行版每年都有一个主要版本,并提供用于安装 .NET 的包管理器. 本 ...

  4. nvm安装管理nodejs

    安装nodejs运行环境 相关连接 步骤 下载nvm-window并安装: https://github.com/coreybutler/nvm-windows/releases 下载完成后直接解压安 ...

  5. PL/SQL连不上,报 ORA-12170:TNS 连接超时

    排错步骤: 1.查看网络是否通畅 打开cmd, ping 数据库IP 2. 查看端口是否通畅 打开cmd,tnsping 数据库IP 如果piing不通,可能是防火墙问题 3.检查防火墙状态 #ser ...

  6. Vue(11)组件化的基本使用

    前言 有时候有一组html结构的代码,并且这个上面可能还绑定了事件.然后这段代码可能有多个地方都被使用到了,如果都是拷贝来拷贝去,很多代码都是重复的,包括事件部分的代码都是重复的.那么这时候我们就可以 ...

  7. C++容器类插入和删除时迭代器的失效情况总结

    容器底层数据结构类型 包含的具体容器 内存分配特点 insert操作后迭代器失效情况 erase操作后迭代器失效情况 数组型数据结构 vector, string, deque, array 元素分配 ...

  8. CosId 1.1.0 发布,通用、灵活、高性能的分布式 ID 生成器

    CosId 通用.灵活.高性能的分布式 ID 生成器 介绍 CosId 旨在提供通用.灵活.高性能的分布式系统 ID 生成器. 目前提供了俩大类 ID 生成器:SnowflakeId (单机 TPS ...

  9. Linux 之 deb 包生成、安装、卸载

    Linux 之 deb 包的生成.安装和卸载 deb DEB 是 Debian 软件包格式的文件扩展名,是 Unixar 的标准归档,将包文件信息以及包内容,经过 gzip 和 tar 打包而成. d ...

  10. 什么是DDoS引导程序IP Stresser?

    1.什么是IP Stresser? IP Stresser是一款用于测试网络或服务器稳健性的工具.管理员可以运行压力测试,从而确定现有资源(带宽.CPU 等)是否足以处理附加负载. 测试个人网络或服务 ...