「笔试刷题」:腐烂的苹果

一、题目

描述

给定一个 𝑛×𝑚 n×m  的网格,其中每个单元格中可能有三种值中的一个 0 , 1 , 2。

其中 0 表示这个格子为空、1 表示这个格子有一个完好的苹果,2 表示这个格子有一个腐烂的苹果。

腐烂的苹果每分钟会向上下左右四个方向的苹果传播一次病菌,并导致相邻的苹果腐烂。请问经过多少分钟,网格中不存在完好的苹果。如果有苹果永远不会腐烂则返回 -1

数据范围: 1≤𝑛,𝑚≤1000 1≤n,m≤1000  ,网格中的值满足 0≤𝑣𝑎𝑙≤2 0≤val≤2 

示例1

输入:

[[2,1,1],[1,0,1],[1,1,1]]

复制返回值:

4

复制

示例2

输入:

[[2,1,0],[1,0,1],[0,0,0]]

返回值:

-1

二、思路解析

这道题用到的是 bfs(宽度优先遍历)算法,对于该算法的具体实现及细节,本篇博客不会过多阐述。

首先,我们需要定义一个二维数组 vis 来记录每个格子,在每一轮的遍历中是否被访问过。

然后遍历整个网格,将所有腐烂的苹果的坐标加入到队列中,并将它们标记为已访问。

开始 BFS,我们就从队列中依次取出腐烂的苹果,向上下左右四个方向传播病菌,并标记相邻的完好苹果为已访问,同时将它们加入队列。

每次完成一轮传播后,时间加一。

最后,我们检查网格中是否还有完好的苹果未被腐烂,如果有则返回 -1,否则返回传播的时间。

具体实现请看下面代码👇

三、完整代码

import java.util.*;public class Solution {int m, n;int[] dx = {0, 0, 1, -1};int[] dy = {1, -1, 0, 0};public int rotApple (ArrayList<ArrayList<Integer>> grid) {m = grid.size();n = grid.get(0).size();boolean[][] vis = new boolean[m][n];Queue<int[]> q = new LinkedList<>();for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(grid.get(i).get(j) == 2){q.add(new int[]{i, j});   }}}int ret = 0;while(!q.isEmpty()){int sz = q.size();while(sz-- != 0){int[] t = q.poll();int a = t[0];int b = t[1];for(int i = 0; i < 4; i++){int x = a + dx[i];int y = b + dy[i];if(x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] && grid.get(x).get(y) == 1){vis[x][y] = true;q.add(new int[]{x, y});}}}ret++;}for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(grid.get(i).get(j) == 1 && !vis[i][j]){return -1;   }}}return ret - 1;}
}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!

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

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

相关文章

接口测试和Mock学习路线(上)

一、接口测试和Mock学习路线-第一阶段&#xff1a; 掌握接口测试的知识体系与学习路线掌握面试常见知识点之 HTTP 协议掌握常用接口测试工具 Postman掌握常用抓包工具 Charles 与 Fiddler结合知名产品实现 mock 测试与接口测试实战练习 1.接口协议&#xff1a; 需要先了解 O…

微服务组件-反向代理(Nginx)

微服务组件-反向代理(Nginx) Nginx 基本概念 1、nginx是什么&#xff1f; ①、Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器同时也提供了IMAP/POP3/SMTP服务。它是一款轻量级的Web服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&a…

Java | Leetcode Java题解之第50题Pow(x,n)

题目&#xff1a; 题解&#xff1a; class Solution {public double myPow(double x, int n) {long N n;return N > 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);}public double quickMul(double x, long N) {if (N 0) {return 1.0;}double y quickMul(x, N / 2);retu…

【打工日常】云原生之搭建个人文件分享的轻量小工具

一、Pingvin Share介绍1.Pingvin Share简介它是一个专注于文件分享的高颜值轻量小工具。2.Pingvin Share功能创建文件共享,你可以通过链接访问这些文件支持自定义链接的后缀部署非常简单(Docker部署2分钟搞定)没有文件大小的限制(只要你的硬盘够大)支持设置共享的到期时间…

【UE5】蓝图通信方式

目录 1、直接通信 2、getAllActorsOfClass 3、getAllActorsOfClassWithTag 4、通过射线检测 5、接口 6、事件分发器 7、SpawnActor 8、调用控制台命令 9、关卡蓝图中直接调用 创建两个Actor蓝图 1、直接通信 场景中 2、getAllActorsOfClass 3、getAllActorsOfClassWit…

SET NOCOUNT ON/OFF 参数

--当 SET NOCOUNT 为 ON 时&#xff0c;不返回计数。 --当 SET NOCOUNT 为 OFF 时&#xff0c;返回计数。 --即使当 SET NOCOUNT 为 ON 时&#xff0c;也更新 ROWCOUNT 函数。 SET NOCOUNT ON go select * from [dbo].[t_book] ; go print ROWCOUNT ---------------------…

学习Rust第14天:HashMaps

今天我们来看看Rust中的hashmaps&#xff0c;在 std::collections crate中可用&#xff0c;是存储键值对的有效数据结构。本文介绍了创建、插入、访问、更新和迭代散列表等基本操作。通过一个计算单词出现次数的实际例子&#xff0c;我们展示了它们在现实世界中的实用性。Hashm…

故障诊断 | 基于迁移学习和SqueezeNet 的滚动轴承故障诊断(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 将一维轴承振动信号转换为二维尺度图&#xff08;时频谱图&#xff09;&#xff0c;并使用预训练网络应用迁移学习对轴承故障进行分类。 迁移学习显著减少了传统轴承诊断方法特征提取和特征选择所花费的时间&#xff…

Coursera: An Introduction to American Law 学习笔记 Week 02: Contract Law

An Introduction to American Law 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors Week 02: Contract LawKey Contract Law TermsSupplemental Re…

C语言笔试题之计数质数

计数质数 实例要求 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量&#xff1b;示例&#xff1a; 实例分析 1、要计算小于非负整数 n 的质数的数量&#xff0c;可以使用埃拉托斯特尼筛法&#xff1b;2、这个算法通过标记素数的倍数来找出所有的素数&#x…

RTK负载(4K可见光+高分热成像+超广角+激光测距)四光AI智能识别跟踪吊舱技术详解

无人机光电吊舱的RTK负载&#xff08;4K可见光高分热成像超广角激光测距&#xff09;AI智能识别跟踪吊舱技术是一种高度集成和先进的无人机观测系统。系统结合了无人机的飞行能力和光电吊舱的多功能传感器&#xff0c;通过集成RTK&#xff08;实时动态差分定位&#xff09;技术…

STL_deque_stack_queue

Deque deque容器(双端队列) ​deque是一种双向开口的分段连续线性空间&#xff08;对外号称连续&#xff0c;使用者无法感知它是分段的&#xff09;。deque支持从头尾两端进行元素的插入和删除。deque没有容量的概念&#xff0c;因为它是动态地以分段连续空间组合而成的。随时…

python 脚本头(PyCharm+python头部信息、py头部信息、python头信息、py头信息、py文件头部)

文章目录 参考PyCharm设置脚本头头部信息 参考 https://developer.aliyun.com/article/1166544 https://blog.csdn.net/Dontla/article/details/131743495 https://blog.csdn.net/dongyouyuan/article/details/54408413 PyCharm设置脚本头 打开pycharm&#xff0c;点击file–…

三维重建一种实现算法

三维重建通常分为基于图像&#xff0c;深度学习&#xff0c;nerf的三维重建方法&#xff0c;本文介绍一种基于slam位姿的用open3d实现的三维重建实现方式。 硬件配置是一个rgbd相机加2d雷达&#xff0c;加广角相机同时装在同一个小车上&#xff0c;每个相机经过内外参相机标定&…

设计模式-观察者模式(Observer Pattern)结构|原理|优缺点|场景|示例

观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;允许一个或多个观察者对象订阅主题对象&#xff0c;当主题对象状态发生改变时&#xff0c;会通知所有已订阅的观察者对象&#xff0c;使得它们能…

【Harmony3.1/4.0】笔记六-对话框

概念 对话框在任何一款应用中&#xff0c;任何一个系统或者平台上使用都非常频繁&#xff0c;这里介绍一下鸿蒙系统中对话框的用法&#xff0c;分别为:普通文本对话框&#xff0c;自定义提示对话框&#xff0c;对话框菜单&#xff0c;警告提示对话框&#xff0c;列表选择对话框…

yolov8源码安装

YOLOv8 是目前最新的 YOLO 模型版本&#xff0c;但是请注意&#xff0c;在撰写本回答时&#xff08;2023年&#xff09;&#xff0c;YOLOv8 可能尚未发布或者还在开发中。因此&#xff0c;以下指导适用于如何安装任何 YOLO 模型的典型源代码。 确保你有正确的 Python 环境。YOL…

Unity 实现原神中的元素反应

一、元素反应 原神中共有七种元素&#xff0c;分别是水、火、冰、岩、风、雷、草。这七种元素能互相作用 Demo下载&#xff1a;Download 元素反应表格图示&#xff0c;可能不够精准 /火水雷冰草岩风绽放原激化火/蒸发超载融化燃烧结晶扩散烈绽放/水蒸发/感电冻结/碎冰绽放结晶…

第7章:网络编程和并发服务器

第7章&#xff1a;网络编程和并发服务器 网络编程是现代软件开发中的一个重要方面&#xff0c;GO语言的并发模型和简洁的语法使得它在网络编程领域表现出色。本章将介绍GO语言的网络编程基础&#xff0c;包括如何使用GO语言创建并发服务器&#xff0c;处理HTTP请求&#xff0c…

Windows主机入侵检测与防御内核技术深入解析

第2章 模块防御的设计思想 2.1 执行与模块执行 本章内容为介绍模块执行防御。在此我将先介绍“执行”分类&#xff0c;以及“模块执行”在“执行”中的位置和重要性。 2.1.1 初次执行 恶意代码&#xff08;或者行为&#xff09;要在被攻击的机器上执行起来&#xff0c;看起…