博客
关于我
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 视图,视图更新删除
    查看>>
    MySQL 触发器
    查看>>
    mysql 让所有IP访问数据库
    查看>>
    mysql 记录的增删改查
    查看>>
    MySQL 设置数据库的隔离级别
    查看>>
    MySQL 证明为什么用limit时,offset很大会影响性能
    查看>>
    Mysql 语句操作索引SQL语句
    查看>>
    MySQL 误操作后数据恢复(update,delete忘加where条件)
    查看>>
    MySQL 调优/优化的 101 个建议!
    查看>>
    mysql 转义字符用法_MySql 转义字符的使用说明
    查看>>
    mysql 输入密码秒退
    查看>>
    mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
    查看>>
    mysql 里对root及普通用户赋权及更改密码的一些命令
    查看>>
    Mysql 重置自增列的开始序号
    查看>>
    MySQL 高可用性之keepalived+mysql双主
    查看>>
    mysql-connector-java各种版本下载地址
    查看>>
    mysql-group_concat
    查看>>
    MySQL-【4】基本操作
    查看>>
    Mysql-丢失更新
    查看>>
    Mysql-事务阻塞
    查看>>