【LeetCode-中等题】994. 腐烂的橘子

这篇具有很好参考价值的文章主要介绍了【LeetCode-中等题】994. 腐烂的橘子。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

【LeetCode-中等题】994. 腐烂的橘子,# 中等题,力扣,leetcode,算法,职场和发展

该题值推荐用bfs,因为是一层一层的感染,而不是一条线走到底的那种,所以深度优先搜索不适合

方法一:bfs+层序遍历

广度优先搜索,就是从起点出发,每次都尝试访问同一层的节点,如果同一层都访问完了,再访问下一层,最后广度优先搜索找到的路径就是从起点开始的最短合法路径。

在该题:假设图中只有一个腐烂的橘子,它每分钟向外拓展,腐烂上下左右相邻的新鲜橘子,那么下一分钟,就是这些被腐烂的橘子再向外拓展腐烂相邻的新鲜橘子,这与广度优先搜索的过程均一一对应,上下左右相邻的新鲜橘子就是该腐烂橘子尝试访问的同一层的节点,路径长度就是新鲜橘子被腐烂的时间。
【LeetCode-中等题】994. 腐烂的橘子,# 中等题,力扣,leetcode,算法,职场和发展文章来源地址https://www.toymoban.com/news/detail-693735.html

class Solution {
// 方法一 : bfs   
    int m = 0;
    int n = 0;//  全局 格子宽度和长度
    int minute = 0;//全局  最小分钟数
    int fulash = 0;// 记录1的个数
    public int orangesRotting(int[][] grid) {
       m = grid.length;
       n = grid[0].length;
       Queue<int[]> queue = new LinkedList<>();
       for(int i = 0; i<m ; i++)
       for(int j = 0; j<n ; j++){
           if(grid[i][j] == 1 ) fulash++;//记录新鲜橘子的个数
           if(grid[i][j] == 2 ){
               grid[i][j] = 2;
               queue.offer(new int[]{i,j});//将坏橘子坐标数组 存入队列
               
           }
       }
        //层序遍历
          while(!queue.isEmpty() && fulash > 0){// 当队列空了 或者 没有新鲜橘子了,停止循环
                    int size = queue.size();
                    minute++;// 一层一层的传染,每传染一层,时间+1
                for(int i = 0 ; i<size ;i++){
                   int[] mid = queue.poll();
                   int x = mid[0];
                   int y = mid[1];
                   //上
                   if(x+1 < m && grid[x+1][y]== 1 ){
                       fulash--; // 每传染一个,更新新鲜橘子的数量
                      grid[x+1][y] = 2;//将新鲜果子感染
                      queue.offer(new int[]{x+1,y});//将感染的果子加入队列,进行下一层的处理

                   }
                   //下
                   if(x-1 >=0 && grid[x-1][y]== 1 ){
                         fulash--;
                       grid[x-1][y] = 2;
                       queue.offer(new int[]{x-1,y});
                        
                   }
                   //右
                   if(y+1 < n && grid[x][y+1]== 1 ){
                         fulash--;
                       grid[x][y+1] = 2;
                       queue.offer(new int[]{x,y+1});
                        
                   }
                   //左
                   if(y-1 >=0 && grid[x][y-1]== 1 ){
                         fulash--;
                       grid[x][y-1] = 2;
                       queue.offer(new int[]{x,y-1});  
                   }
            }

                
        }

        if(fulash > 0) return -1;//若还有新鲜橘子  则返回-1
        else  return minute;//无新鲜橘子  则返回minute
    }

}

到了这里,关于【LeetCode-中等题】994. 腐烂的橘子的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【贪心算法】Leetcode 55. 跳跃游戏【中等】

    给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例 1: 输入 :nums = [2,3,1,1,4] 输出: true 解释 :可以先跳 1 步,从下标

    2024年04月28日
    浏览(33)
  • LeetCode_贪心算法_中等_763.划分字母区间

    给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。返回一个表示每个字符串片段的长度的列表。 示例 1: 输入:s = “ababcbacadefegdehijhklij” 输出

    2024年02月14日
    浏览(30)
  • [Java·算法·中等] LeetCode122. 买股票的最佳时机 II 解读

    人不走空                                                                          目录         🌈个人主页:人不走空       💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 题目 示例 示例1 示例2 示例3  提示  详细解读 作者其他作品:   给你一

    2024年02月19日
    浏览(26)
  • 力扣(LeetCode)算法_C++—— 快乐数

    编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是

    2024年02月09日
    浏览(24)
  • 算法学习——LeetCode力扣回溯篇2

    40. 组合总和 II - 力扣(LeetCode) 描述 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 示例 1: 输入: candidates = [10,1,2,7

    2024年02月20日
    浏览(28)
  • LeetCode面试算法-力扣 88. 合并两个有序数组

    88. 合并两个有序数组 题目描述     给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意: 最终,合并后数组不应由函数返回,而是存储

    2024年02月10日
    浏览(34)
  • 刷力扣 LeetCode 算法题需要充值会员吗?

    大家好,我是『负雪明烛』。 在过去的这些年里,我的一项业余爱好就是写作算法题解。如今写了上千篇题解了! 在 CSDN 上,我的博客获得了 200 多万的阅读。 在力扣中国题解区,我也获得了180 万的阅读。 当然,这些多归功于粉丝们的关注与支持!!谢谢各位!! 我一直

    2024年02月09日
    浏览(39)
  • 算法学习——LeetCode力扣字符串篇

    344. 反转字符串 - 力扣(LeetCode) 描述 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 示例 1: 输入:s = [“h”,“e”,“l”

    2024年02月20日
    浏览(36)
  • 力扣(LeetCode)算法_C++—— 存在重复元素

    给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 示例 1: 输入:nums = [1,2,3,1] 输出:true 示例 2: 输入:nums = [1,2,3,4] 输出:false 示例 3: 输入:nums = [1,1,1,3,3,4,3,2,4,2] 输出:true 提示: 1 = nums.length = 105 -1

    2024年02月09日
    浏览(37)
  • 力扣(LeetCode)算法_C++——有效的数独

    请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 注意: 一个有效的数独(部分已

    2024年02月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包