Leetcode--994. 腐烂的橘子(java)
初始化:遍历整个网格,找到所有初始的新鲜橘子(值为1)的位置,并将这些位置加入BFS队列,同时记录它们的腐烂时间(初始为0)。 BFS处理:从队列中取出一个橘子,检查它的四个邻居。如果邻居是新鲜橘子且未被腐烂过,将其腐烂时间记录为当前时间+1,并将邻居加入队列。 计算最大时间:在BFS结束后,找到所有腐烂时间中的最大值,这就是所需的最小分钟数。 检查结果:如果有任何新鲜橘子未被腐烂,返回-1;否则,返回最大腐烂时间。 初始化:遍历网格,找到所有初始的新鲜橘子位置,并将它们加入队列,同时初始化时间矩阵。 BFS处理:从队列中取出橘子,检查四个方向的邻居,如果邻居是新鲜橘子且未被腐烂,记录腐烂时间并加入队列。 计算最大时间:在BFS结束后,找到所有腐烂时间中的最大值。 检查结果:如果存在未被腐烂的新鲜橘子,返回-1;否则,返回最大腐烂时间。
发布日期:2021-04-30 21:02:03
浏览次数:90
分类:精选文章
本文共 3071 字,大约阅读时间需要 10 分钟。
为了解决这个问题,我们需要模拟橘子的腐烂过程,计算每分钟腐烂的橘子数量,并统计总时间。我们可以使用广度优先搜索(BFS)来处理每一步的扩散,因为每一步都是由腐烂的橘子感染周围的新鲜橘子。
方法思路
解决代码
import java.util.*;public class Solution { public int orangesRotting(int[][] grid) { if (grid.length == 0) return 0; int rows = grid.length; int cols = grid[0].length; Queue queue = new LinkedList<>(); int[][] time = new int[rows][cols]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (grid[i][j] == 1) { time[i][j] = 0; queue.add(new int[]{i, j}); } else { time[i][j] = -1; } } } int maxTime = 0; while (!queue.isEmpty()) { int[] cell = queue.poll(); int i = cell[0]; int j = cell[1]; int currentTime = time[i][j]; // 上 if (i > 0) { int ni = i - 1; int nj = j; if (grid[ni][nj] == 1 && time[ni][nj] == -1) { time[ni][nj] = currentTime + 1; queue.add(new int[]{ni, nj}); maxTime = Math.max(maxTime, time[ni][nj]); } } // 下 if (i < rows - 1) { int ni = i + 1; int nj = j; if (grid[ni][nj] == 1 && time[ni][nj] == -1) { time[ni][nj] = currentTime + 1; queue.add(new int[]{ni, nj}); maxTime = Math.max(maxTime, time[ni][nj]); } } // 左 if (j > 0) { int ni = i; int nj = j - 1; if (grid[ni][nj] == 1 && time[ni][nj] == -1) { time[ni][nj] = currentTime + 1; queue.add(new int[]{ni, nj}); maxTime = Math.max(maxTime, time[ni][nj]); } } // 右 if (j < cols - 1) { int ni = i; int nj = j + 1; if (grid[ni][nj] == 1 && time[ni][nj] == -1) { time[ni][nj] = currentTime + 1; queue.add(new int[]{ni, nj}); maxTime = Math.max(maxTime, time[ni][nj]); } } } // 检查是否有未被腐烂的1 boolean hasFresh = false; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (grid[i][j] == 1 && time[i][j] == -1) { hasFresh = true; break; } } if (hasFresh) break; } return hasFresh ? -1 : maxTime; }} 代码解释
发表评论
最新留言
关注你微信了!
[***.104.42.241]2026年06月18日 19时17分29秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP生成器-动态生成内容的数组
2023-03-01
PHP的ip2long和long2ip升级函数
2023-03-01
php的web路径获取
2023-03-01
php的一些小笔记--字符串
2023-03-01
php的几种运行模式CLI、CGI、FastCGI、mod_php
2023-03-01
php的四大特性八大优势
2023-03-01
RabbitMQ
2023-03-01
PHP的威胁函数与PHP代码审计实战
2023-03-01
PHP的引用举例
2023-03-01
PHP相关代码
2023-03-01
RabbitMQ
2023-03-01
php知识点记录
2023-03-01
PHP第三方登录—OAuth2.0协议
2023-03-01
php筛选js,php如何多条件筛选js代码
2023-03-01
R730服务器做了raid的硬盘,插在R720上面可以用吗?
2023-03-01
PHP类数组式访问(ArrayAccess接口)
2023-03-01
PHP系列:浅谈PHP中isset()和empty() 函数的区别
2023-03-01