力扣第994题:腐烂的橘子(BFS)

一、题目内容

        

二、题目分析

        这道题目是为了查找所有橘子均腐烂时候经过的最小时间,最佳方法是使用BFS,可以将每分钟看做遍历一层,直到遍历完为止。

        首先我们要遍历一遍grid数组,找出新鲜橘子的数量count,当后续每次新鲜橘子被腐烂的时候,就让它减一,需要保证count大于0,在遍历grid的时候,还需要将最开始就是腐烂的橘子的坐标放进一个队列中去,以便后续调用。

        之后我们在while循环中进行判断,取出队列中的队头,然后获取它的四周的坐标,如果坐标在矩阵grid之内,就判断它的值,只有当它为1的时候,腐烂它,也就是将它的值改成2,并且将它加入队列中,最后再将count-1。

        在while循环开始的时候,我们让经历的轮数ans++,因为我们是一层层遍历的,每遍历一层,就是在一分钟之内把能腐蚀的橘子都给腐蚀了。

        代码:

        

class Solution {
    public int orangesRotting(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
        int count = 0;
        Queue<int[]>list=new LinkedList<>();
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(grid[i][j]==1)
                    count++;
                else if(grid[i][j]==2)
                    list.add(new int[]{i,j});
            }
        }
        int ans = 0;
        int [][]move={{0,1},{0,-1},{1,0},{-1,0}};
        while(!list.isEmpty()&&count>0){
            ans++;
            int size=list.size();
            for(int k=0;k<size;k++){
                int []point=list.poll();
                for(int []cur:move){
                    int i = point[0]+cur[0];
                    int j = point[1]+cur[1];
                    if(i>=0&&i<m&&j>=0&&j<n)
                        if(grid[i][j]==1){
                            count--;
                            grid[i][j]=2;
                            list.add(new int[]{i,j});
                        }
                }
            }
        }
        if(count>0)
            return -1;
        return ans;
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少๑渊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值