腐烂的橘子
作者:互联网
使用广度遍历实现该算法,时间复杂度为O(row*col)
,空间复杂度为O(row*col)
,
class Solution {
public int orangesRotting(int[][] grid) {
//记录橘子的位置
Deque<Integer> rq=new LinkedList<>();
Deque<Integer> cq=new LinkedList<>();
int row=grid.length;
int col=grid[0].length;
//该橘子能够感染的所有路径
int[][] orient={{1,0},{-1,0},{0,1},{0,-1}};
//找出感染的橘子,加入队列
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(grid[i][j]==2){
rq.add(i);
cq.add(j);
}
}
}
//时间
int minute=0;
while(rq.size()!=0&&cq.size()!=0){
//进行广度遍历,设置标志位
int lr=rq.size();
int flag=0;
for(int f=0;f<lr;f++){
int r=rq.poll();
int c=cq.poll();
for(int i=0;i<4;i++){
int tmpr=r+orient[i][0];
int tmpc=c+orient[i][1];
//判断是否溢出
if(tmpr<row&&tmpr>=0&&
tmpc<col&&tmpc>=0){
if(grid[tmpr][tmpc]==1){
grid[tmpr][tmpc]=2;
rq.add(tmpr);
cq.add(tmpc);
flag=1;
}
}
}
}
if(flag==1)minute++;
}
//判断当前是否还有没有被感染的橘子
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(grid[i][j]==1){
return -1;
}
}
}
return minute;
}
}
标签:int,tmpc,腐烂,grid,橘子,tmpr,row 来源: https://blog.csdn.net/qq_43641886/article/details/104648301