博客
关于我
LeetCode 评论区:你管这难度叫简单???
阅读量:695 次
发布时间:2019-03-16

本文共 2241 字,大约阅读时间需要 7 分钟。

解决方案

要解决这个问题,我们需要模拟橘子腐烂传播的过程。使用广度优先搜索(BFS)来逐层扩散腐烂,直到所有新鲜橘子都被腐蚀。每次处理一个腐烂橘子,会检查其四个邻居,将新鲜邻居腐化并加入队列。

方法思路

  • 初始化:遍历网格,记录初始的腐烂橘子位置,并将它们加入队列。统计新鲜橘子的数量count。
  • BFS处理:每分钟处理队列中的所有腐烂橘子。对于每个腐烂橘子,检查其上下左右的邻居。
  • 腐化邻居:如果邻居是新鲜橘子,将其腐化,加入队列,并减少count。
  • 终止条件:如果在BFS结束后,仍有新鲜橘子存在,返回-1。否则,返回处理所需的分钟数。
  • 解决代码

    import java.util.Deque;import java.util.ArrayDeque;public class orangesRotting02 {    public static int orangesRotting(int[][] grid) {        int rows = grid.length;        int cols = grid[0].length;        Deque
    queue = new ArrayDeque<>(); int count = 0; // 初始化队列,记录初始腐烂点,并统计新鲜点数 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (grid[i][j] == 2) { queue.add(new int[]{i, j}); } else if (grid[i][j] == 1) { count++; } } } int res = 0; while (!queue.isEmpty() && count > 0) { res++; int size = queue.size(); for (int i = 0; i < size; i++) { int[] temp = queue.poll(); int r = temp[0], c = temp[1]; // 上 if (r > 0 && grid[r - 1][c] == 1) { grid[r - 1][c] = 2; count--; queue.add(new int[]{r - 1, c}); } // 下 if (r < rows - 1 && grid[r + 1][c] == 1) { grid[r + 1][c] = 2; count--; queue.add(new int[]{r + 1, c}); } // 左 if (c > 0 && grid[r][c - 1] == 1) { grid[r][c - 1] = 2; count--; queue.add(new int[]{r, c - 1}); } // 右 if (c < cols - 1 && grid[r][c + 1] == 1) { grid[r][c + 1] = 2; count--; queue.add(new int[]{r, c + 1}); } } } return count == 0 ? res : -1; }}

    代码解释

  • 初始化部分:遍历网格,记录初始腐烂点,并将它们加入队列。同时统计新鲜橘子的数量count。
  • BFS处理:每次从队列中取出一个橘子,检查其四个邻居。对于每个有效邻居,检查是否是新鲜橘子,将其腐化,并加入队列,同时减少count。
  • 返回结果:当队列为空时,若count为0,返回处理分钟数res;否则,返回-1。
  • 这个方法通过BFS高效地处理了每个橘子的腐蚀过程,确保在最少的分钟内完成任务。如果无法完成任务,如示例中的某些情况,会返回-1。

    转载地址:http://idhqz.baihongyu.com/

    你可能感兴趣的文章
    Mysql学习总结(31)——MySql使用建议,尽量避免这些问题
    查看>>
    Mysql学习总结(33)——阿里云centos配置MySQL主从复制
    查看>>
    Mysql学习总结(37)——Mysql Limit 分页查询优化
    查看>>
    Mysql学习总结(38)——21条MySql性能优化经验
    查看>>
    Mysql学习总结(39)——49条MySql语句优化技巧
    查看>>
    Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等
    查看>>
    Mysql学习总结(40)——MySql之Select用法汇总
    查看>>
    Mysql学习总结(41)——MySql数据库基本语句再体会
    查看>>
    Mysql学习总结(42)——MySql常用脚本大全
    查看>>
    Mysql学习总结(43)——MySQL主从复制详细配置
    查看>>
    Mysql学习总结(44)——Linux下如何实现mysql数据库每天自动备份定时备份
    查看>>
    Mysql学习总结(45)——Mysql视图和事务
    查看>>
    Mysql学习总结(46)——8种常被忽视的SQL错误用法
    查看>>
    Mysql学习总结(48)——MySql的日志与备份还原
    查看>>
    Mysql学习总结(49)——从开发规范、选型、拆分到减压
    查看>>
    Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
    查看>>
    Mysql学习总结(56)——MySQL用户管理和权限设置
    查看>>
    Mysql学习总结(58)——深入理解Mysql的四种隔离级别
    查看>>
    Mysql学习总结(59)——数据库分库分表策略总结
    查看>>
    Mysql学习总结(60)——并发量大、数据量大的互联网业务数据库设计规范总结
    查看>>