当前位置: 首页 > news >正文

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; } }
http://www.jsqmd.com/news/310157/

相关文章:

  • 吐血推荐!专科生必用AI论文平台TOP10:开题报告神器大测评
  • hot100 207.课程表
  • 基于LSTM-ARIMA的空气质量预测与预警模型(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • hot100 124.二叉树中的最大路径和
  • 基于python的大气质量分析与预测项目(大数据分析数据可视化机器学习)(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • Python全球酒店预订数据分析课程(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 基于Python的网络数据分析可视化(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 未来3年,云端IDE市场格局将被DevBox类产品彻底颠覆
  • 十大门窗品牌哪家好?2026年真实测评排行榜与选购指南
  • mapCIDR使用手册
  • 吴恩达深度学习课程五:自然语言处理 第二周:词嵌入 课后习题与代码实践
  • 微信小程序监听返回操作,强制停留当前页面(右滑手势、安卓物理返回键)
  • JVM定义
  • 大语言模型实战(十七)——GraphRAG(图谱检索增强生成)介绍
  • Java毕设选题推荐:基于springboot的小区公共收益管理系统小区电梯广告、公共车位、场地租赁【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 计算机Java毕设实战-基于springboot的小区公共收益管理系统小区公共配套设施收益管理【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Java计算机毕设之基于springboot的小区公共收益归属、分配、管理、使用管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 使用Qwen-agent构建智能体解决大模型数学计算问题
  • 使用VLLM+Deepseek+Milvus构建本地向量库
  • wqs二分
  • 【路径规划】基于快速扩展随机树RRT规划器实现机器人在在网格内找到从指定起始区域到目标区域的路径,同时避开沿途障碍物附matlab代码
  • 【图像增强】水下图像一致性增强评价系统Matlab实现
  • 【免费代码分享】10种卷积神经网络融合BiLSTM的多变量时间序列预测
  • 时序数据库 Apache IoTDB 入选国家重点研发计划高新技术成果产业化试点
  • 2026年回望:Sealos DevBox如何重新定义了云端开发的标准
  • Mac启动Redis并连接
  • 渲染慢到通宵,如何提高渲染速度? 这套技巧3 步搞定!
  • GPU 和 CPU 渲染谁更顶?新手必看的选型指南
  • 如何高效查询海量IP归属地?大数据分析中的IP查询应用
  • Github开源插件!最新豆包AI无水印图批量下载,免费无广告使用,支持高清无损图片下载 (1)