解放漫画收藏自由:3步构建个人离线图书馆,效率提升300%

核心内容摘要

主流AI视频生成商用方案选型评测:关键能力与成本效益分析
IS31F3729双设备级联实战:基于CH32V103的RGB灯带控制方案

iOS微信红包助手:从技术原理到高阶应用全解析

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

三男一女cp免费高清观看-三男一女cp免费高清观看应用

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

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