[JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994
[JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994
唉……之前写过笔记总结的问题,还是又卡住了。
自挂东南枝……
题目地址:
Rotting Oranges
题目如下:
You are given an m x n
grid
where each cell can have one of three values:
0
representing an empty cell,1
representing a fresh orange, or2
representing a rotten orange.
Every minute, any fresh orange that is 4-directionally adjacent 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
.
解题思路
快被自己蠢哭了,在 leetcode 279 里面的时候写过了:
这里的
size
必须要声明一个变量去进行保存,否则 queue 的长度会在第三个循环中不断地变化,从而导致第二个循环无法结束,返回错误的答案。
还是因为这个问题卡了好久……
以后不能偷懒,还是得多定义一些变量,尤其是可能会产生变动的值,例如说数组长度之类的……
除此之外还有一个问题就在于,开局同时有多个 rotton orange:
这时候橘子会同时从 grid[0][0]
与 grid[2][2]
开始烂起,而不是先烂完一边,再烂另一边。
如果忽略了这个条件,那么可能至少一半的 test cases 都无法通过。
这样的话,就需要在进行 BFS 之前就扫描一次数组,将所有烂橘子都丢到 queue 里面,遍历同一层级的结点时,counter+1。伪代码大致如下:
while rottonOranges:counter++;for rottronOrange in rottonOranges:bfs()
就是这个 for
循环的终结条件又把我卡上了……
使用 JavaScript 解题
重要的事情说三遍,const size = rottonOranges.length;
这个条件是必须的,JavaScript 中必须要重新声明一个变量去保存 size
。
const directions = [[1, 0],[-1, 0],[0, 1],[0, -1],
];const findOranges = (grid) => {let freshOranges = 0,rottonOranges = [];for (let i = 0; i < grid.length; i++) {for (let j = 0; j < grid[i].length; j++) {if (grid[i][j] === 1) freshOranges++;else if (grid[i][j] === 2) rottonOranges.push([i, j]);}}return [freshOranges, rottonOranges];
};/*** @param {number[][]} grid* @return {number}*/
var orangesRotting = function (grid) {if (!grid || !grid[0]) return -1;let [freshOrange, rottonOranges] = findOranges(grid);if (freshOrange === 0) return 0;let minutes = 0;while (rottonOranges.length && freshOrange > 0) {minutes++;const size = rottonOranges.length;for (let i = 0; i < size; i++) {const [currRow, currCol] = rottonOranges.shift();for (const [rowAdded, colAdded] of directions) {const updatedRow = currRow + rowAdded,updatedCol = currCol + colAdded;if (grid[updatedRow] && grid[updatedRow][updatedCol] === 1) {grid[updatedRow][updatedCol] = 2;rottonOranges.push([updatedRow, updatedCol]);freshOrange--;}}}}if (freshOrange > 0) return -1;return minutes;
};
[JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994相关推荐
- 刷题汇总(一)leetcode 精选50题 JavaScript答案总结
题目来源 腾讯精选练习(50 题) 信息更新时间:2019-3-11,因为要准备面前端,就用js做了遍来熟悉JavaScript这门语言,50道题均已提交通过. GitHub地址:https://gi ...
- [JavaScript 刷题] 树 - 完全二叉树的节点个数, leetcode 222
[JavaScript 刷题] 树 - 完全二叉树的节点个数, leetcode 222 github repo 地址: https://github.com/GoldenaArcher/js_lee ...
- 刷题汇总(三)leetcode 精选50题 C++答案总结
题目来源 腾讯精选练习(50 题) 相关: 刷题汇总(一)leetcode 精选50题 JavaScript答案总结 刷题汇总(二)剑指Offer 66题 C++答案总结 刷题汇总(四)技术类编程题汇 ...
- [JavaScript 刷题] Code Signal - 相似数组(Are Similar?)
[JavaScript 刷题] Code Signal - 相似数组(Are Similar?) 题目地址:Are Similar? 题目 如下: Two arrays are called simi ...
- python基础刷题_数据结构与算法LeetCode刷题(Python)
参考资料: 一.链表 1. 链表的必备知识要点(包括基础知识.刷题中使用的STL等知识) 2. 链表逆序(LeetCode 92 ,206. Reverse Linked List 1,2) 3. ...
- Java腐烂的橘子leetcode
在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜 ...
- 994. 腐烂的橘子(Leetcode)(多源BFS)
994. 腐烂的橘子 难度简单85 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方 ...
- 边工作边刷题:70天一遍leetcode: day 94-1
Largest BST Subtree 要点: http://articles.leetcode.com/largest-binary-search-tree-bst-in 这题重点是理解题意,还有道 ...
- 边工作边刷题:70天一遍leetcode: day 98
LRU Cache 这是一道leetcode的难题,这种题往往是算法结构很复杂,涉及一个或多个考点算法和数据结构的组合,同时又有很多corner cases要考虑.所以一定要找到合适memorize的 ...
最新文章
- 在XtraGrid中自定义日期编辑控件的格式
- 使用axios post 提交数据,后台获取不到提交的数据解决方案
- python【蓝桥杯vip练习题库】ADV-233 队列操作
- Linux_CentOS-服务器搭建 六
- 前端 重构时需要注意的事项_前端数据层落地实践
- new/delete与malloc/free
- 华为推出全球最快AI训练集群Atlas 900,算力超群
- SLAM学习笔记-------------(七)视觉里程计
- 一些学习的网址和资料
- 软件开发模型:瀑布模型,增量模型,原型模型,螺旋模型,喷泉模型,敏捷开发模型
- HDOJ 5143 NPY and arithmetic progression DFS
- 白塞尔公式_如何设计像乌塞尔这样的800人的婚礼
- 只要心存美好便是岁月花开时
- 【数据库】聊一下数据库的锁机制
- gitlab:不能中文搜索
- JavaScript基础第02天—运算符(操作符)—流程控制—循环—代码规范
- signature=00e3717ebf4d3479c02d1e8e6e919c84,MS12-037:Internet Explorer 的累積安全性更新:2012 年 6 月 12 日...
- 方舟自建服务器500人,方舟等级上限mod500 | 手游网游页游攻略大全
- 项目:“表情包”制作---利用ffmpeg制作Gif动态图
- 千里眼摄像头支持对象存储吗_视频监控对象存储
热门文章
- 慢慢说计网:HTTP 长短连接
- 数据结构(递归及应用)
- 使用Mybatis相关类生成sql语句
- word怎么删除参考文献的横线_教大家word2016怎么去掉引用参考文献中的横线
- HTML系列之文本格式化标签
- 基于levy飞行改进的麻雀搜索算法-附代码
- 免费!中文!10个最佳Python学习网站推荐
- 招投标系统源码 java招投标系统 招投标系统简介 招投标系统功能设计
- ValueError:Traceback(most ...)数据集中图片 not exists
- 原生Js弹窗插件|web弹出层组件|对话框