9.1国产CAD:解放创造力,赋能中国智造

核心内容摘要

色,不止于“色”:探索“多多黄”背后的视觉盛宴与文化密码
不良网站下载官方版_不良网站下载最新版本v.25.15.57265

放课后的体育仓库:少年心事与秘密基地

思路/步骤以下图为例1统计所有初始就腐烂的橘子的位置加到列表q中现在q [(0,

]。

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

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

,(1,

]。

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

,(1,

]。

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

]。

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

]。

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

为了判断是否有永远不会腐烂的橘子如示例2我们可以统计初始新鲜橘子的个数fresh。

在BFS中每有一个新鲜橘子被腐烂就把fresh减一这样最后如果发现fresh0就意味着有橘子永远不会腐烂返回-1。

疑问如果代码中不在while循环中判断fresh0会发生什么答会在腐烂完所有新鲜橘子后多循环一次这会导致ans比实际多1。

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

2空间复杂度O(mn)。

附代码class Solution { private static final int[][] DIRECTIONS ; //四方向 public int orangesRotting(int[][] grid) { int m grid.length; int n grid[0].length; int fresh 0; Listint[] q new ArrayList(); for(int i 0;i m;i){ for(int j 0;j n;j){ if(grid[i][j]

{ fresh; //统计新鲜橘子的个数 }else if(grid[i][j]

{ q.add(new int[]{i,j}); //一开始就腐烂的橘子 } } } int ans 0; while(fresh 0 !q.isEmpty()){ ans; //经过一分钟 Listint[] 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]

{ //新鲜橘子 fresh--; grid[i][j] 2; //变成腐烂的橘子 q.add(new int[]{i,j}); } } } } return fresh 0 ? -1 : ans; } }

蘑菇视频网页版-蘑菇视频网页版应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123