LeetCode:994腐烂的橘子

java 复制代码
class Solution {
    public int orangesRotting(int[][] grid) {
        int rows = grid.length;
        int cols = grid[0].length;

        //盛放腐烂橘子坐标
        Queue<int[]> queue = new LinkedList<>();
        //记录新鲜橘子数量
        int freshCount = 0;

        //遍历整个网格,将腐烂橘子放入队列同时统计新鲜数量
        for(int r = 0; r < rows; r++){
            for(int c = 0; c < cols; c++){
                if(grid[r][c] == 2){
                    queue.offer(new int[]{r,c});
                }else if(grid[r][c] == 1){
                    freshCount++;
                }
            }
        }

        if(freshCount == 0){
            return 0;
        }

        int minutes = 0;
        //上下左右移动的数组
        int[][] dirs = {{-1,0},{1,0},{0,-1},{0,1}};

        while(!queue.isEmpty() && freshCount > 0){
            minutes++;
            //当前队列中腐烂橘子数量
            int size = queue.size();

            for(int i = 0; i < size; i++){
                //取出腐烂橘子的坐标
                int[] zombie = queue.poll();
                int r = zombie[0];
                int c = zombie[1];

                //开始向四周橘子腐烂
                for(int[] dir : dirs){
                    int nextR = r + dir[0];
                    int nextC = c + dir[1];

                    if(nextR < 0 || nextR >= rows || nextC < 0 || nextC >= cols
                        || grid[nextR][nextC] != 1){
                        continue;
                    }

                    grid[nextR][nextC] = 2;
                    freshCount--;

                    queue.offer(new int[]{nextR,nextC});
                }
            }
        }
        return freshCount == 0 ? minutes : -1;
    }
}

解题思路:

定义一个盛放一维数组的队列,用于盛放腐烂的橘子;定义一个记录新鲜橘子数量的变量。

双层循环将腐烂橘子入队,同时记录新鲜橘子数量。

循环将腐烂橘子向上下左右四个方向扩散,同时设置边界条件。

新的腐烂橘子入队。

找连通块、算面积、数有几座岛,用DFS

求最短路径、求扩散层数、求最小时间,用BFS

相关推荐
隔窗听雨眠1 小时前
Nginx网关响应慢排查手记
java·服务器·nginx
珂朵莉MM1 小时前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--束搜索
人工智能·算法
智慧物业老杨1 小时前
智慧物业合同周期管理系统:从风险预警到智能交接的全流程数智化落地方案
java·人工智能·python
源码宝2 小时前
MES系统源码:Java8 + SpringBoot2.7 + MySQL8 + Redis,后端源码清爽易扩展
java·后端·源码·springboot·mes系统·源码二开·mes源码
Omics Pro2 小时前
首个!外源天然产物综合性代谢图谱
数据库·人工智能·算法·机器学习·r语言
JAVA社区2 小时前
Java高级全套教程(十)—— SpringCloudAlibaba超详细实战详解
java·开发语言·spring cloud·面试·职场和发展
voidmort2 小时前
3. 微调(Fine-tuning)与强化学习(RL)的核心思想
python·深度学习·算法
金銀銅鐵2 小时前
[Java] 如何理解 class 文件中方法的 descriptor?
java·后端
云烟成雨TD3 小时前
Spring AI Alibaba 1.x 系列【63】AI Agent 长期记忆
java·人工智能·spring