算法---腐烂的橘子

题目

在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:

值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。

返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。

示例 1:

在这里插入图片描述

输入:grid = [[2,1,1],[1,1,0],[0,1,1]]
输出:4
示例 2:

输入:grid = [[2,1,1],[0,1,1],[1,0,1]]
输出:-1
解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个正向上。
示例 3:

输入:grid = [[0,2]]
输出:0
解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0 。

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 10
grid[i][j] 仅为 0、1 或 2

解决方法

    fun orangesRotting(grid: Array<IntArray>): Int {//统计有几个没坏的var notBad = 0//把坏的坐标记录进队列val listBad = LinkedList<IntArray>()val bad = 2val good = 1grid.forEachIndexed { row, ints ->ints.forEachIndexed { col, i ->when (i) {good -> {notBad++}bad -> {listBad += intArrayOf(row, col)}else -> {}}}}var direction = arrayOf(intArrayOf(0, -1),intArrayOf(-1, 0),intArrayOf(0, 1),intArrayOf(1, 0),)//记录轮次var count = 0//不停的取出来while (listBad.isNotEmpty() && notBad != 0) {val size = listBad.sizefor (i in 1..size) {val first = listBad.pollFirst()for (array in direction) {if (first[0] + array[0] in grid.indices && first[1] + array[1] in grid[0].indices) {when (grid[first[0] + array[0]][first[1] + array[1]]) {good -> {listBad.addLast(intArrayOf(first[0] + array[0], first[1] + array[1]))grid[first[0] + array[0]][first[1] + array[1]] = 2notBad--}bad -> {//不是我传染的 我不应该管吧 不然死循环了}else -> {}}}}}count++}//判断没坏的是不是等于0 等于0 返回次数 否则返回-1return if (notBad == 0) count else -1}

总结

1.注意:当传播到最后一轮,只要没有了好橘子,那么就算队列里面不是空的,也没有必要继续传播了。

这么难得题,我竟然想法完全没错。我真猛啊

现在面试算法不成大问题了,但是感觉项目经历亮点不够,导致不太好找。
慢慢来吧,算法不能丢,项目慢慢做。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/156515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

isEmpty() 和 null的区别

概念 null&#xff1a;是对象为空&#xff08;IsNull&#xff09;&#xff1b;isEmpty()&#xff1a;是值为空&#xff08;IsEmpty&#xff09; 具体 null指任务类型变量以及对象类型的变量是否为空。IsEmpty函数&#xff1a;用于判断一个变量是否已初始化&#xff0c;如果变…

QML SplitView

SplitView 是什么主要属性orientationhandlevisibleAreachildren简单示例interactiveminimumWidth/minimumHeight 和 maximumWidth/maximumHeightonClicked 和 onDoubleClicked示例 属性和技巧Layout AdjustmentsStyling and AppearanceIntegrating with Other ComponentsProp…

STM32在进行CAN总线多节点通信时,同时发数据会一直收不到某设备数据的问题及解决

CAN多设备通信收不到某设备数据的问题及解决 遇到的问题问题的发现CAN总线的一般冲突机制STM32中的CAN冲突机制 遇到的问题 问题的发现 最近在开发Canopen项目中&#xff0c;进行一主多从设备通信时&#xff0c;主站发送同步帧&#xff0c;两个从站往往只有帧ID优先级高的设备…

【C++进阶之路】第四篇:set和map

文章目录 一、关联式容器健值对二、set & multiset三、map & multimap在这里插入图片描述 四、set和map底层原理 一、关联式容器健值对 关联式容器 & 键值对 二、set & multiset set & multiset 三、map & multimap map & multimap 四、set和…

数据分析软件工具有哪些

数据分析是当下企业必不可少的工具之一&#xff0c;数据资产是企业的重中之重&#xff0c;如何在各类数据当中提取重要信息&#xff0c;从而辅助企业做出智慧决策是企业的核心。下面&#xff0c;数聚就从常见的工具当中为企业做出介绍&#xff0c;方便企业寻找到适合自己的工具…

SocketIo的使用和基于SocketIO的聊天室

Socket.IO 是一个库&#xff0c;可以在客户端和服务器之间实现 低延迟, 双向 和 基于事件的 通信。 一、Socket.IO的特点 以下是 Socket.IO 在普通 WebSockets 上提供的功能&#xff1a; 1、HTTP 长轮询回退 如果无法建立 WebSocket 连接&#xff0c;连接将回退到 HTTP 长轮…

Cesium 加载geojson数据类型点线面

1.获取geojson数据&#xff0c;本地新建一个.ts文件放置数据导出&#xff0c;并引入 获取geojson数据&#xff1a; DataV.GeoAtlas地理小工具系列 import { scGeojson } from ./geojson; 2.加载面 const addPolygonEvt () > {viewer.dataSources.add(Cesium.GeoJsonDataSo…

【计算机网络学习之路】Windows下的socket编程

文章目录 前言Windows下的socket编程1.预备工作2. socket编程 结束语 前言 本系列文章是计算机网络学习的笔记&#xff0c;欢迎大佬们阅读&#xff0c;纠错&#xff0c;分享相关知识。希望可以与你共同进步。 本篇文章仅记录Windows下socket编程和Linux的不同&#xff0c;并没…

将docker镜像打包成tar.gz包

docker save -o web10.tar localhost:8000:1.0 生成web10.tar gzip web10.tar 生成web10.tar.gz

Vue3的响应式更新是由什么实现的

目录 而Vue3则利用了Proxy的强大特性来实现了响应式更新。 以上代码中&#xff0c;我们定义了一个原始的data对象&#xff0c;并将其使用Proxy进行了代理。在代理对象proxy中&#xff0c;我们定义了get和set两个方法&#xff0c;当我们读取或设置响应式数据的值时&#xff0c…

云ES容灾方案

一、ES集群可用性容灾 1.1 云ES集群可用性容灾(使用跨可用区实例) 云ES集群部署在三个可用区,单可用区故障,云ES集群依然可能对外提供服务;两个可用区故障,需要进行控制台切流(集群会自动切的选择主节点) 应用服务部署在二个可用区,单可用区故障,依然可对提供服务1.2 …

开源网安解决方案荣获四川数实融合创新实践优秀案例

​11月16日&#xff0c;2023天府数字经济峰会在成都圆满举行。本次峰会由四川省发展和改革委员会、中共四川省委网络安全和信息化委员会办公室、四川省经济和信息化厅等部门联合指导&#xff0c;聚焦数字经济与实体经济深度融合、数字赋能经济社会转型发展等话题展开交流研讨。…

vue2【相关介绍】

目录 1&#xff1a;什么是单页面应用程序 2&#xff1a;什么是vue-cli 3&#xff1a;安装使用 4&#xff1a;vue项目的目录结构&#xff1a;​编辑 5&#xff1a;了解src目录的构成&#xff1a; 6&#xff1a;vue项目的运行流程 7&#xff1a;el&#xff1a;容器名称&…

python paramiko模块

示例 import paramikossh paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动添加主机名及主机密钥到本地 HostKeys 对象&#xff0c;默认是拒绝未知的 ssh 服务器连接 ssh.connect(node, usernameyour_username, passwordyour_passwo…

ChatGPT暂时停止开通plus,可能迎来封号高峰期

前言: 前两日,chat gpt的创始人 San Altman在网上发表了,由于注册的使用量超过了他们的承受能力,为了确保每个人的良好使用体验,chat gpt将暂时停止开通gpt plus。 情况: 前段时间好像出现了官网崩溃的情况,就连api key都受到了影响,所以现在就开始了暂时停止plus的注…

leetcode做题笔记2216. 美化数组的最少删除数

给你一个下标从 0 开始的整数数组 nums &#xff0c;如果满足下述条件&#xff0c;则认为数组 nums 是一个 美丽数组 &#xff1a; nums.length 为偶数对所有满足 i % 2 0 的下标 i &#xff0c;nums[i] ! nums[i 1] 均成立 注意&#xff0c;空数组同样认为是美丽数组。 你…

本机idea连接虚拟机中的Hbase

相关环境&#xff1a; 虚拟机&#xff1a;Centos7 hadoop版本:3.1.3 hbase版本:2.4.11 zookeeper版本:3.5.7 Java IDE:IDEA JDK&#xff1a;8 步骤 步骤一&#xff1a;在idea创建一个maven项目 步骤二&#xff1a;在虚拟机里找到core-site.x…

Epoll:让IO多路复用变得有趣

Epoll 是 Linux 系统中高性能的 I/O 事件通知机制&#xff0c;通过它可以实现对大量文件描述符的高效监控&#xff0c;适用于构建高并发的网络服务器。 文章目录 epoll介绍主要特点epoll与poll、select区别效率和扩展性文件描述符数量限制工作模式小结 epoll常用函数epoll_crea…

苹果ipa内侧分发可以通过哪些方法

苹果ipa内侧分发可以通过使用苹果企业签名、云服务分发平台、TestFlight分发等方式实现。 对于企业签名&#xff0c;它适合用于公司内部员工使用的应用&#xff0c;或者需要快速安装和使用的应用。开发者可以在苹果开发者中心生成企业级证书&#xff0c;然后将应用打包成IPA文…

如何在3dMax中使用Python返回场景内所有对象的列表?

如何在3dMax中使用Python返回场景内所有对象的列表&#xff1f; 3dMax支持开发基于Python的工具和扩展&#xff0c;因此可以对其进行自定义并将其集成到现代数字内容创建管道中。为此&#xff0c;3dMax集成了Python 3.9解释器&#xff0c;并通过pymxs API公开了3dMax的丰富功能…