沉醉在铜铜铜铜铜铜铜铜好大好深的色星空:一场穿越时空的视觉与心灵之旅

核心内容摘要

《魅魔妈妈》第三季:颠覆想象,重塑温情,一场不可错过的视听盛宴
探索17.c的神秘之门:隐藏入口,无限可能

2020四虎紧急地址最新发布:开启你的全感官视听盛宴,定义私人娱乐新高度

思路/步骤以下图为例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; } }

免费看b站大片app-免费看b站大片应用

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

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