[LeetCode] 994. Rotting Oranges 腐烂的橘子
题目:
思路:
每个腐烂的橘子都能将自己上下左右的新鲜橘子传染,像极了现在的肺炎...
如果格子中只有一个腐烂的橘子,那么这便是一个典型的层次遍历,第一个传染多个,称为第二层,第二层传染第三层
但这里会出现初始时便有多个腐烂橘子的情况,其实道理是一样的,将第一层看成多个而不是一个,同样是层次遍历
这里利用双栈来实现层次遍历:
栈A存储第一批腐烂橘子,将第一批腐烂橘子传染的第二批腐烂橘子的位置全部存储至B,后将A清空,随后将B中第二批传染的第三批的位置存储至A,将B清空,直至AB均空
同时记录新鲜橘子的个数num,若最后num>0,说明不能将所有橘子传染,返回-1
代码:
class Solution {
public:
// row: 行, col: 列, res: 结果, num: 新鲜橘子数
int row, col, i, j, res=, num=;
void search(int i, int j, stack<pair<int, int>>& S, vector<vector<int>>& visited,
vector<vector<int>>& grid){
if(i->= && !visited[i-][j] && grid[i-][j]==) {
S.push(make_pair(i-, j));
visited[i-][j]=;
grid[i-][j] = ;
num--;
}
if(j->= && !visited[i][j-] && grid[i][j-]==) {
S.push(make_pair(i, j-));
visited[i][j-]=;
grid[i][j-] = ;
num--;
}
if(i+<row && !visited[i+][j] && grid[i+][j]==) {
S.push(make_pair(i+, j));
visited[i+][j]=;
grid[i+][j] = ;
num--;
}
if(j+<col && !visited[i][j+] && grid[i][j+]==) {
S.push(make_pair(i, j+));
visited[i][j+]=;
grid[i][j+] = ;
num--;
}
}
int orangesRotting(vector<vector<int>>& grid) {
row = grid.size();
col = grid[].size();
vector<vector<int>> visited(row, vector<int>(col, ));
stack<pair<int, int>> A, B;
for(i=; i<row; i++){
for(j=; j<col; j++){
if(grid[i][j]==){
A.push(make_pair(i, j));
visited[i][j]=;
}else if(grid[i][j]==)
num++; // 记录新鲜橘子的个数
}
}
while(!A.empty() || !B.empty()){
if(A.empty()){
while(!B.empty()){
i=B.top().first;
j=B.top().second;
search(i, j, A, visited, grid);
B.pop();
}
}else{
while(!A.empty()){
i=A.top().first;
j=A.top().second;
search(i, j, B, visited, grid);
A.pop();
}
}
res++;
}
if(num) return -;
return res==?res:res-;
}
};
注:在最后一层时,没有可以传染的新鲜橘子了,但此时某个栈里仍是非空的(最后一层各个位置),所以res会多加一次,在最后减去就好
同时,如果没有橘子或者本身就是腐烂橘子,res值为0,此时不需要减去1
[LeetCode] 994. Rotting Oranges 腐烂的橘子的更多相关文章
- [leetcode] 994. Rotting Oranges
题目 You are given an m x n grid where each cell can have one of three values: 0 representing an empty ...
- 【Leetcode_easy】994. Rotting Oranges
problem 994. Rotting Oranges 参考 1. Leetcode_easy_994. Rotting Oranges; 完
- 【LeetCode】994. Rotting Oranges 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS 日期 题目地址:https://leetco ...
- 【leetcode】994. Rotting Oranges
题目如下: In a given grid, each cell can have one of three values: the value 0 representing an empty cel ...
- Leetcode之广度优先搜索(BFS)专题-994. 腐烂的橘子(Rotting Oranges)
Leetcode之广度优先搜索(BFS)专题-994. 腐烂的橘子(Rotting Oranges) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ar ...
- [Swift]LeetCode994. 腐烂的橘子 | Rotting Oranges
In a given grid, each cell can have one of three values: the value 0 representing an empty cell; the ...
- Leetcode春季打卡第四天:994. 腐烂的橘子
Leetcode春季打卡第四天:994. 腐烂的橘子 Leetcode春季打卡第四天:994. 腐烂的橘子 思路 思路是采用广度优先搜索,一层一层遍历. 首先先扫描矩阵,将坏橘子放进队列,记录正常橘子 ...
- leetcode 994.腐烂的橘子
题目: 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂 ...
- Rotting Oranges - LeetCode
目录 题目链接 注意点 解法 小结 题目链接 Rotting Oranges - LeetCode 注意点 解法 解法一:bfs.首先先统计所有新鲜的橘子数目fresh,如果fresh大于0则一直执行 ...
随机推荐
- elastic search记录
安装与启动 插件安装 中文分词器 https://github.com/medcl/elasticsearch-analysis-ik elastic api GET _search { " ...
- [LC] 255. Verify Preorder Sequence in Binary Search Tree
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...
- 吴裕雄--天生自然 JAVA开发学习:多线程编程
class RunnableDemo implements Runnable { private Thread t; private String threadName; RunnableDemo( ...
- 基于css完成网页的国际化
css完成国际化 前提 在日常处理国际化的时候,通常是将key通过类似intl.xx(key)转换为对应环境的文案,可是如果需要在css中加入对应逻辑应该怎么做呢(比如在after的伪元素中显示不同的 ...
- 【mysql学习】InnoDB数据结构
原来知道有一些索引失效的条件,最近看了看mysql底层数据结构,明白了为什么会失效 ,记录之.众所周知,常用的mysql数据引擎有两种,今天全是以InnoDB为基础开启探索之旅的,另一种有时间再说吧. ...
- Select(快速选择顺序统计量)原理及C++代码实现
SELECT算法利用快排中的partition思想来进行无序数组的快速选择. 寻找第i个顺序统计量可以简单理解为寻找第i小的元素. 该算法通过为partition选择一个好的主元,来保证Partiti ...
- 零基础学习Web前端开发
目录 技术背景 开发环境 学习过程 参考资料 结束语 技术背景 什么是前端开发? 前端开发是创建Web页面或App等将界面呈现给用户的过程.通过使用 HTML,CSS,JavaScript,以及它们衍 ...
- uname|mv|tar -xzvf|
$ ls CAFE-4.2.1.tar.gz mcl-latest.tar.gz mysql-5.4.3-beta-linux-i686-glibc23.tar.gz.1 orthomclSoftwa ...
- 荼菜的iOS笔记--UIView的几个Block动画
前言:我的第一篇文章荼菜的iOS笔记–Core Animation 核心动画算是比较详细讲了核心动画的用法,但是如你上篇看到的,有时我们只是想实现一些很小的动画,这时再用coreAnimation就会 ...
- VDMA搭建视频通路总结
全局观查,对整个工程的搭建的关键是要保证PL部分搭建成功,PS部分搭建成功,而且两者配合的很好. 我理解的PL部分涉及到模块的组合以及模块或者IP之间的逻辑的整理,PL部分困扰我比较久的是自动生成的w ...