[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, or
  • 2 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相关推荐

  1. 刷题汇总(一)leetcode 精选50题 JavaScript答案总结

    题目来源 腾讯精选练习(50 题) 信息更新时间:2019-3-11,因为要准备面前端,就用js做了遍来熟悉JavaScript这门语言,50道题均已提交通过. GitHub地址:https://gi ...

  2. [JavaScript 刷题] 树 - 完全二叉树的节点个数, leetcode 222

    [JavaScript 刷题] 树 - 完全二叉树的节点个数, leetcode 222 github repo 地址: https://github.com/GoldenaArcher/js_lee ...

  3. 刷题汇总(三)leetcode 精选50题 C++答案总结

    题目来源 腾讯精选练习(50 题) 相关: 刷题汇总(一)leetcode 精选50题 JavaScript答案总结 刷题汇总(二)剑指Offer 66题 C++答案总结 刷题汇总(四)技术类编程题汇 ...

  4. [JavaScript 刷题] Code Signal - 相似数组(Are Similar?)

    [JavaScript 刷题] Code Signal - 相似数组(Are Similar?) 题目地址:Are Similar? 题目 如下: Two arrays are called simi ...

  5. python基础刷题_数据结构与算法LeetCode刷题(Python)

    参考资料: 一.链表 1.  链表的必备知识要点(包括基础知识.刷题中使用的STL等知识) 2.  链表逆序(LeetCode 92 ,206. Reverse Linked List 1,2) 3. ...

  6. Java腐烂的橘子leetcode

    在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜 ...

  7. 994. 腐烂的橘子(Leetcode)(多源BFS)

    994. 腐烂的橘子 难度简单85 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方 ...

  8. 边工作边刷题:70天一遍leetcode: day 94-1

    Largest BST Subtree 要点: http://articles.leetcode.com/largest-binary-search-tree-bst-in 这题重点是理解题意,还有道 ...

  9. 边工作边刷题:70天一遍leetcode: day 98

    LRU Cache 这是一道leetcode的难题,这种题往往是算法结构很复杂,涉及一个或多个考点算法和数据结构的组合,同时又有很多corner cases要考虑.所以一定要找到合适memorize的 ...

最新文章

  1. 在XtraGrid中自定义日期编辑控件的格式
  2. 使用axios post 提交数据,后台获取不到提交的数据解决方案
  3. python【蓝桥杯vip练习题库】ADV-233 队列操作
  4. Linux_CentOS-服务器搭建 六
  5. 前端 重构时需要注意的事项_前端数据层落地实践
  6. new/delete与malloc/free
  7. 华为推出全球最快AI训练集群Atlas 900,算力超群
  8. SLAM学习笔记-------------(七)视觉里程计
  9. 一些学习的网址和资料
  10. 软件开发模型:瀑布模型,增量模型,原型模型,螺旋模型,喷泉模型,敏捷开发模型
  11. HDOJ 5143 NPY and arithmetic progression DFS
  12. 白塞尔公式_如何设计像乌塞尔这样的800人的婚礼
  13. 只要心存美好便是岁月花开时
  14. 【数据库】聊一下数据库的锁机制
  15. gitlab:不能中文搜索
  16. JavaScript基础第02天—运算符(操作符)—流程控制—循环—代码规范
  17. signature=00e3717ebf4d3479c02d1e8e6e919c84,MS12-037:Internet Explorer 的累積安全性更新:2012 年 6 月 12 日...
  18. 方舟自建服务器500人,方舟等级上限mod500 | 手游网游页游攻略大全
  19. 项目:“表情包”制作---利用ffmpeg制作Gif动态图
  20. 千里眼摄像头支持对象存储吗_视频监控对象存储

热门文章

  1. 慢慢说计网:HTTP 长短连接
  2. 数据结构(递归及应用)
  3. 使用Mybatis相关类生成sql语句
  4. word怎么删除参考文献的横线_教大家word2016怎么去掉引用参考文献中的横线
  5. HTML系列之文本格式化标签
  6. 基于levy飞行改进的麻雀搜索算法-附代码
  7. 免费!中文!10个最佳Python学习网站推荐
  8. 招投标系统源码 java招投标系统 招投标系统简介 招投标系统功能设计
  9. ValueError:Traceback(most ...)数据集中图片 not exists
  10. 原生Js弹窗插件|web弹出层组件|对话框