news 2026/5/1 9:05:55

hot100 994.腐烂的橘子

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hot100 994.腐烂的橘子

1.思路/步骤:以下图为例

(1)统计所有初始就腐烂的橘子的位置,加到列表q中,现在q = [(0,0)]。

(2)初始化答案ans = 0,模拟橘子腐烂的过程,不断循环,直到没有新鲜的橘子,或者q为空。

(3)ans加1,在第ans = 1分钟,遍历q中橘子的四方向相邻的新鲜橘子,把这些橘子腐烂,q更新为这些橘子的位置,现在q = [(0,1),(1,0)]。

(4)ans加1,在第ans = 2分钟,遍历q中橘子的四方向相邻的新鲜橘子,把这些橘子腐烂,q更新为这些橘子的位置,现在q = [(0,2),(1,1)]。

(5)ans加1,在第ans = 3分钟,遍历q中橘子的四方向相邻的新鲜橘子,把这些橘子腐烂,q更新为这些橘子的位置,现在q = [(2,1)]。

(6)ans加1,在第ans = 4分钟,遍历q中橘子的四方向相邻的新鲜橘子,把这些橘子腐烂,q更新为这些橘子的位置,现在q = [(2,2)]。

(7)由于没有新鲜橘子,退出循环。

2.为了判断是否有永远不会腐烂的橘子(如示例2),我们可以统计初始新鲜橘子的个数fresh。在BFS中,每有一个新鲜橘子被腐烂,就把fresh减一,这样最后如果发现fresh>0,就意味着有橘子永远不会腐烂,返回-1。

3.疑问:如果代码中不在while循环中判断fresh>0,会发生什么?

答:会在腐烂完所有新鲜橘子后,多循环一次,这会导致ans比实际多1。

4.复杂度分析:

(1)时间复杂度:O(mn),其中m和n分别为grid的行数和列数。

(2)空间复杂度:O(mn)。

附代码:

class Solution { private static final int[][] DIRECTIONS = {{-1,0},{1,0},{0,-1},{0,1}}; //四方向 public int orangesRotting(int[][] grid) { int m = grid.length; int n = grid[0].length; int fresh = 0; List<int[]> q = new ArrayList<>(); for(int i = 0;i < m;i++){ for(int j = 0;j < n;j++){ if(grid[i][j] == 1){ fresh++; //统计新鲜橘子的个数 }else if(grid[i][j] == 2){ q.add(new int[]{i,j}); //一开始就腐烂的橘子 } } } int ans = 0; while(fresh > 0 && !q.isEmpty()){ ans++; //经过一分钟 List<int[]> tmp = q; q = new ArrayList<>(); for(int[] pos : tmp){ //已经腐烂的橘子 for(int[] d : DIRECTIONS){ //四方向 int i = pos[0] + d[0]; int j = pos[1] + d[1]; if(i >= 0 && i < m && j >= 0 && j < n && grid[i][j] == 1){ //新鲜橘子 fresh--; grid[i][j] = 2; //变成腐烂的橘子 q.add(new int[]{i,j}); } } } } return fresh > 0 ? -1 : ans; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 22:15:42

面试-RMSNorm和LayerNorm的区别

1 LayerNorm 背景: 在神经网络中,每一层输出都将作为下一层的输入。 问题: 在训练过程中,前一层参数的微小更新,所带来的输出会导致后一层输入的分布发生剧烈变化。这就是层与层之间的动态失调。俗称 内部协变量偏移(Internal Covariate Shift)。 现象: 比如,第一层…

作者头像 李华
网站建设 2026/4/30 5:02:47

GPU 和 CPU 渲染谁更顶?新手必看的选型指南

在3D渲染、影视后期、游戏开发领域&#xff0c;“GPU与CPU渲染选哪个”是高频争议题。新手纠结硬件选型&#xff0c;老手权衡效率与质量&#xff0c;实则二者无绝对优劣&#xff0c;核心是适配场景——如同搬东西&#xff0c;CPU像法拉利&#xff08;快但装载量小&#xff09;&…

作者头像 李华
网站建设 2026/4/30 5:01:38

【六杆】六杆快速回归机制运动学和动力学分析附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#…

作者头像 李华
网站建设 2026/5/1 6:13:13

java: 找不到符号方法 getCode()

运行Spring Boot工程代码出现以下报错&#xff1a; 位置: 类型为com.xx.xx.exception.ErrorCode的变量 errorCode解决方法看截图中间那个路径框&#xff1a; ...lombok\unknown\lombok-unknown.jar这里的 unknown 说明 IDEA 根本没找到 Lombok 的 jar 包。 接下来&#xff0c; …

作者头像 李华
网站建设 2026/5/1 7:46:13

【双指针】盛水最多的容器

求解代码 public int maxArea(int[] height) {int left 0; // 左指针int right height.length - 1; // 右指针int ans 0; // 记录最大面积&#xff0c;初始为0&#xff08;面积非负&#xff09;// 双指针相向遍历&#xff0c;直到指针相遇while (left < right) {// 计算当…

作者头像 李华