news 2026/2/9 17:37:57

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/2/7 16:35:12

hot100 207.课程表

思路&#xff1a;本题相当于给定一个有向图&#xff0c;判断图中是否存在环。1.判断环&#xff1a;如果在递归的过程中&#xff0c;发现下一个节点在递归栈中&#xff08;也就是正在访问中&#xff09;&#xff0c;则说明找到了环。2.举例&#xff0c;如下图所示&#xff1a;路…

作者头像 李华
网站建设 2026/2/8 10:26:45

C++引用:别名而已,为何如此关键?奥秘在哪里?

博主介绍&#xff1a;程序喵大人 35 - 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x…

作者头像 李华
网站建设 2026/2/7 21:04:06

Python全球酒店预订数据分析课程(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

Python全球酒店预订数据分析课程(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 论文包含随机森林、XGBoost、逻辑回归模型&#xff0c;约550行代码11万条数据&#xff0c;带完整数据集和分析报告 用City Hotel和Resort Hotel…

作者头像 李华
网站建设 2026/2/7 12:55:16

吐血推荐!专科生必用AI论文平台TOP10:开题报告神器大测评

吐血推荐&#xff01;专科生必用AI论文平台TOP10&#xff1a;开题报告神器大测评 2026年专科生论文写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着AI技术的不断发展&#xff0c;越来越多的专科生开始借助AI论文平台提升写作效率、优化论文结构。然而&#xff0c…

作者头像 李华
网站建设 2026/2/9 18:38:21

渲染慢到通宵,如何提高渲染速度? 这套技巧3 步搞定!

作为三维动画创作者&#xff0c;谁没经历过这些崩溃瞬间&#xff1f;渲染到凌晨软件闪退、单帧耗时超2小时、电脑配置拉满仍卡顿预览……其实渲染慢未必是硬件不够顶&#xff0c;找对方法就能让效率翻倍。本文整合实操技巧与专业参数&#xff0c;兼顾新手易上手性和进阶需求&am…

作者头像 李华
网站建设 2026/2/7 22:47:33

【双指针】接雨水

求解代码 public long maxWater(int[] arr) {// 数组长度<3&#xff0c;无法形成凹坑接水&#xff0c;直接返回0if (arr null || arr.length < 3) {return 0;}int left 0; // 左指针int right arr.length - 1; // 右指针long ans 0; // 总积水量int leftMax arr[le…

作者头像 李华