LeetCode994 Rotting Oranges

题目描述

In a given grid, each cell can have one of three values:

  • the value 0 representing an empty cell;
  • the value 1 representing a fresh orange;
  • the value 2 representing a rotten orange.

Every minute, any fresh orange that is adjacent (4-directionally) to a rotten orange becomes rotten.

Return the minimum number of minutes that must elapse until no cell has a fresh orange. If this is impossible, return -1 instead.

Example 1:

Input: [[2,1,1],[1,1,0],[0,1,1]]
Output: 4

Example 2:

Input: [[2,1,1],[0,1,1],[1,0,1]]
Output: -1
Explanation:  The orange in the bottom left corner (row 2, column 0) is never rotten, because rotting only happens 4-directionally.

Example 3:

Input: [[0,2]]
Output: 0
Explanation:  Since there are already no fresh oranges at minute 0, the answer is just 0.

Note:

  1. 1 <= grid.length <= 10
  2. 1 <= grid[0].length <= 10
  3. grid[i][j] is only 0, 1, or 2.

思路

Step1: 统计数组中的新鲜橘子的个数,统计腐败橘子并记录腐败橘子的位置,将记录的值放入数组中。

int fresh=0;
Queue<int[]> q = new LinkedList();
for(int x=0;x<grid.length;x++)for(int y=0;y<grid[0].length;y++){if(grid[x][y]==1)fresh++;else if(grid[x][y]==2){int array[]={x,y};q.add(array);}}

Step2: 设定方向数组direction[1,0,-1,0,1] 因为每个腐败橘子会让其上下左右腐败,根据方向进行BFS。

int minutes=0;
int direction[]={1,0,-1,0,1};
while(fresh!=0 && !q.isEmpty()){int size = q.size();while(size!=0){int arr[]=q.remove();int x=arr[0];int y=arr[1];for(int i=0;i<4;i++){int dx=x+direction[i];int dy=y+direction[i+1];if(dx<0||dx>=grid.length||dy<0||dy>=grid[0].length||grid[dx][dy]!=1)continue;fresh--;grid[dx][dy]=2;int n[]={dx,dy};q.add(n);}size--;}minutes++;
}

Step3:因为会存在与腐败橘子不相邻的新鲜橘子,因此当fresh不为0时,返回-1.

if(fresh==0)return minutes;
return -1;

LeetCode994 Rotting Oranges解题方案相关推荐

  1. 算法大赛十强战队解题方案大公开!【附PPT下载】

    2020腾讯广告算法大赛已圆满结束,决赛舞台上一个又一个设计巧妙.思路清晰的解题方案,仍旧让每位观众都记忆犹新. 纵观决赛,其中最显眼的就是冠军战队"DYG"对于BERT的应用,他 ...

  2. 小区文化建设成居民困扰,捷径智慧物业系统提出解题方案

    小区文化建设成居民困扰,捷径智慧物业系统提出解题方案 截至至今,西安地区的社区图书阅览室仍然处于较尴尬的地位. 社区图书阅览室借阅图书不方便,来看书的居民很难查找到自己想阅读的图书,图书摆放无序化,社 ...

  3. 2018中国高校计算机大赛—大数据挑战赛(top2解题方案)

    比赛链接:https://www.kesci.com/home/competition/5ab8c36a8643e33f5138cba4/leaderboard/1 相关链接:https://mp.w ...

  4. CCF BDCI面向电信行业存量用户的智能套餐个性化匹配模型解题方案

    参考源码:Top2方案 原始数据 问题主要是根据如下的数据所进行的11类分类问题. 字段 中文名 数据类型 说明 USERID 用户ID VARCHAR2(50) 用户编码,标识用户的唯一字段 cur ...

  5. leetcode 994. Rotting Oranges | 994. 腐烂的橘子(BFS)

    题目 https://leetcode.com/problems/rotting-oranges/ 题解 和 leetcode 542. 01 Matrix | 542. 01 矩阵(图解,广度优先搜 ...

  6. leetcode解题方案--015--3 sum

    题目 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all ...

  7. 双赛道20支战队解题思路大公开,线上Poster Session等你来

    ​2021腾讯广告算法大赛从4月启动,经过两个多月的激烈比赛,已经在7月7日分别得出了两个赛道的入围排行榜.8月16日 14:00,2021腾讯广告算法大赛将以网络直播形式举行决赛答辩. 决赛当天,& ...

  8. 花式上分算法大赛,速看鹅厂六强团队解题思路集锦【附PPT下载】

    历经4个月的算法征程,伴随着外部.内部赛道终极答辩,2020腾讯广告算法大赛正式落下帷幕(点击回顾).本届赛事火爆空前,外部赛道吸引了上万名全国选手火热PK,内部赛道的角逐也颇为激烈,吸引了来自 TE ...

  9. How To Solve It!怎样解题

    人生会遇到各种各样的问题,人生的轨迹就是解决这些突如其来的问题.通过解决问题我们得到成长,所以如果你觉得生活中有各种各样的问题,也不该过分苦恼,人生像是一场游戏,如果没有一些任务,该是多么无聊呀. 闲 ...

最新文章

  1. 全卷积神经网路【U-net项目实战】Unet++
  2. vue组件父子组件之间传递数据
  3. 临床科研设计的主要内容
  4. 【51单片机快速入门指南】8:看门狗定时器(WDT)
  5. 视频号、抖音、海外Tiktok到底该选择那个平台更好
  6. UUID 查看linux的UUID 与 SVN 工程的 UUID。(两者之间没有联系)
  7. SAAS及PAAS的概念
  8. java调用python脚本并向python脚本传递参数
  9. Android中文API(125) —— VideoView
  10. 在UNITY中按钮的高亮用POINT灯实现,效果别具一番风味
  11. Oracle函数-分析函数-获取上一条(下一条)记录
  12. IOS高德地图使用说明
  13. 敏捷结果30天之第十一天:高效能、慢生活
  14. ubuntu windows双系统默认启动项切换
  15. 白帽子学习——Metasploit渗透测试指南
  16. SESAM | GeniE 实用教程
  17. 切切切词!新词发现算法TopWORDS的原理及实现|实在智能AI+RPA学院
  18. 去哪儿网人工客服电话
  19. Firebird数据库表结构及数据导出
  20. 定类,定序,定距,定比

热门文章

  1. 如何修改excel的修改日期?
  2. android混淆一步一步
  3. INFLUXDB-influxDB一些查询语法你必须知道
  4. 性能测试ftp服务器,linux测试ftp服务器
  5. 天融信虚拟企业防火墙学习
  6. STM32之vl53l0x读取距离
  7. IDEA 查找某个 jar 包是如何被引入的
  8. 百度智能云发布全新云智一体3.0架构,自研技术贯穿各层级
  9. QLabel的四种显示方式
  10. Dreamweaver CS4 解决序列号过期问题 OS XP