二维数组广度优先遍历-腐烂的苹果

news2024/10/7 12:17:34

一、问题描述

二、解题思路

此问题通过广度优先遍历来解决,模拟苹果发霉变坏的过程

        1.初始时遍历网格,借助队列来储存所有发霉的苹果,统计好苹果个数

        2.每一分钟队列内发霉苹果都会对周围的苹果起作用(向外部扩散),所以把队列内所有发霉苹果依次弹出,对每个弹出的发霉苹果四周进行判断,传染健康苹果,然后把传染的健康苹果再次加入发霉队列中,这样就模拟了每一分钟的向外扩散过程。

        3.只要还有好苹果并且发霉列表内不为空,就重复执行上述操作(每次重复,时间统计+1)。

        4.当好苹果数量为0时,说明全部扩散完成,返回上述统计的时间;当队列内发霉苹果数量为0,此时健康苹果数量不是0时,意味着好苹果被空格隔离起来了,永远不会变质,则返回-1。

三、代码实现

import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param grid int整型ArrayList<ArrayList<>> 
     * @return int整型
     */
    public int rotApple (ArrayList<ArrayList<Integer>> grid) {
        int useTime=0;
        int healthyApple=0;
        //对应上下左右坐标变换
        int[] dx={0,0,-1,1};
        int[] dy={1,-1,0,0};

        int n=grid.size(),m=grid.get(0).size();

        //设置队列,存储发霉苹果
        Queue<int[]> appleQue=new LinkedList<>();

        //统计发霉苹果和健康苹果
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(grid.get(i).get(j)==2){
                    appleQue.offer(new int[]{i,j});
                }else if(grid.get(i).get(j)==1){
                    healthyApple++;
                }
            }
        }

        //从队列中弹出发霉水果,看是否会影响到周围,模拟传播过程,更新健康苹果数量
        //如果不再产生影响(队列为空),则证明完成传播过程
        //查看健康苹果个数是否为0,如果不是0则证明永远不会发霉,返回-1
        //如果是0则返回传播时间useTime
        while(healthyApple>0&&!appleQue.isEmpty()){
            useTime++;
            int badSize=appleQue.size();
            for(int i=0;i<badSize;i++){
                int[] nowidxArr=appleQue.poll();
                for(int j=0;j<dx.length;j++){
                    int x=nowidxArr[0]+dx[j];
                    int y=nowidxArr[1]+dy[j];
                    if(x>=0&&x<n&&y>=0&&y<m&&grid.get(x).get(y)==1){
                        grid.get(x).set(y,2);
                        healthyApple--;
                        appleQue.offer(new int[]{x,y});
                    }
                }
            }
        }
        if(healthyApple==0){
            return useTime;
        }else{
            return -1;
        }
    }
}

四、刷题链接

腐烂的苹果_牛客题霸_牛客网

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

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

相关文章

Python 高级编程:文件操作与错误处理

在前几篇文章中&#xff0c;我们介绍了Python的基本语法、函数和模块以及面向对象编程。这些知识对于大部分日常编程问题已经足够&#xff0c;但对于需要分析大数据的人来说&#xff0c;这些还不够。本章将介绍Python的文件操作以及错误处理与调试。 目录 文件操作读文件写文…

鸿蒙开发系统基础能力:【@ohos.systemTime (设置系统时间)】

设置系统时间 本模块用来设置、获取当前系统时间&#xff0c;设置、获取当前系统日期和设置、获取当前系统时区。 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import systemTime …

线性代数基础概念:行列式

目录 线性代数基础概念&#xff1a;行列式 1. 行列式的定义 1.1 递归定义 1.2 代数余子式定义 1.3 几何定义 2. 行列式的性质 2.1 行列式等于其转置的行列式 2.2 交换两行或两列&#xff0c;行列式变号 2.3 将一行或一列乘以一个数 k&#xff0c;行列式乘以 k 2.4 将…

初创企业合规管理中的企业合规义务边界问题

在初创企业的迅猛发展过程中&#xff0c;合规管理是确保公司可持续成长和避免潜在风险的关键因素。而在合规管理中&#xff0c;界定企业边界尤为重要&#xff0c;它关系到企业如何合理规划业务范围、管理内部外部关系以及维护企业形象和法律责任的清晰。 一、初创企业面临的合…

转让北京资产评估公司变更需要什么条件和要求

北京资产评估公司是有限责任公司。因为有限责任公司具有人合属性&#xff0c;股东的个人信用及相互关系直接影响到公司的风格甚至信誉&#xff0c;所以各国公司法对有限责任公司股东向公司外第三人的转让股权&#xff0c;多有限制性规定。大致可分为法定限制和约定限制两类。公…

没什么用的java技巧

1.将需要注入bean的方法,包装为静态方法,让其看起来不需要依赖注入等操作,但实际依然需要

关于mysq数据库备份的几个问题

1 mysql怎么双机热备&#xff1f; 或者怎么两个mysql服务器互相同步&#xff1f; MySQL的双机热备或两个MySQL服务器之间的互相同步&#xff0c;通常通过几种不同的同步机制来实现&#xff0c;这些机制确保了数据的实时更新和备份。以下是几种常见的同步方式及其实现步骤&…

程序员在企业中是如何做需求的

在企业中&#xff0c;一个需求从产生到完成生命周期是什么样的。 它可以分为这样的步骤&#xff1a; 需求分析 -> 设计&#xff08;原型、功能、接口设计&#xff09; -> 技术选型 -> 搭建项目框架 -> 编码&#xff08;实现业务逻辑&#xff09; -> 测试&#…

Python数据分析之-Oracle数据库连接

文章目录 cx_Oracle 介绍cx_Oracle运行原理cx_Oracle 安装linux环境安装windows环境安装 cx_Oracle 使用单独使用结合Pandas使用 参考资料 cx_Oracle 介绍 cx_Oracle 8是一个Python扩展模块&#xff0c;它提供了对Oracle数据库的访问能力。以下是cx_Oracle 8的一些关键特性和功…

springboot vue 开源 会员收银系统 (8) 收银台、开卡结算及订单的优化升级

前言 完整版演示 开发版演示 在之前的开发进程中&#xff0c;我们基本搭建了收银台的基础。这次着重梳理一下收银台相关功能的开发及优化情况。 1.会员查询与开卡 收银台新增加了会员筛选功能 并且会员和会员卡是一对多的关系 理论可以开无数张卡 默认选择一张卡 会员卡选择…

国家自然科学基金标书大全(2002-2024)

数据来源&#xff1a;在20世纪80年代初&#xff0c;为了促进中国的科技体制革新并改革科研资金分配机制&#xff0c;中国科学院的89位院士联名向党和国家领导人提出建议&#xff0c;设立了国家自然科学基金的设立。国自然基金自创立以来&#xff0c;根据国家发展科学技术方针、…

张大哥笔记:赚钱第一步,把手弄脏,准时出摊

出来混&#xff0c;最重要的是什么&#xff1f;是“出来”。同样的&#xff0c;赚钱第一步&#xff0c;也是先出来&#xff0c;立刻开始行动起来&#xff01; 想要赚钱&#xff0c;最关键的因素是什么&#xff1f;答案是“先出来”。赚钱这件事&#xff0c;本身就是反人性的&am…

引导过程与服务器控制

一、引导过程 1.开机自检 服务器主机开机以后&#xff0c;将根据主板 BIOS 中的设置对 CPU&#xff08;Central Processing Unit&#xff0c; 中央处理器&#xff09;、内存、显卡、键盘等设备进行初步检测&#xff0c;检测成功后根据预设的启动顺序移 交系统控制权&#xff0c…

深入学习Java1415新特性

一、超实用的Java14新特性 1.Java14新特性概述 2.环境安装 3.超实用新特性

png格式快速压缩该怎么做?在电脑压缩png图片的方法

png格式的图片如何快速压缩变小呢&#xff1f;现在网络的不断发展&#xff0c;图片是日常用来分享展示内容的一种常用手段&#xff0c;其中使用最多的一种图片格式就是png&#xff0c;png格式具有无损压缩支持透明底的特性&#xff0c;在很多的场景下都会使用。 现在图片的清晰…

2024体育赛事一波接一波,大学生借IKCEST国际大数据竞赛打造AI“嘴强”主播

2024德国欧洲杯激战正酣&#xff0c;不但比赛精彩纷呈&#xff0c;各种新科技还竞相“整活”。从虚拟广告技术到人工智能辅助裁判&#xff0c;令人目不暇接。而“AI体育”的想象空间&#xff0c;还不仅于此。 近日&#xff0c;2024IKCEST第六届“一带一路”国际大数据竞赛暨第…

ES6深潜指南:解锁JavaScript类与继承的高级技巧,让您的代码更加优雅

前言 随着前端技术的迅猛发展&#xff0c;JavaScript已经成为构建现代Web应用不可或缺的编程语言。ES6&#xff08;ECMAScript 2015&#xff09;引入了许多期待已久的特性&#xff0c;其中类&#xff08;Classes&#xff09;和继承机制的引入&#xff0c;极大地增强了JavaScrip…

ONLYOFFICE 桌面编辑器 8.1使用体验分享

目录 编辑器市场现状与用户选择 ONLYOFFICE桌面编辑器概览和功能 ONLYOFFICE桌面编辑器概览 功能丰富的PDF编辑器 演示文稿编辑器的创新 文档编辑的灵活性 电子表格的高级功能 语言和本地化 用户界面和体验 媒体播放 云服务和本地处理 跨平台支持 总结 在线亲身体…

C++用Crow实现一个简单的Web程序,实现动态页面,向页面中输入数据并展示

Crow是一个轻量级、快速的C微框架&#xff0c;用于构建Web应用程序和RESTful API。 将处理前端页面的POST请求以添加数据的逻辑添加到 /submit 路由中&#xff0c;并添加了一个新的路由 / 用于返回包含输入框、按钮和表格的完整页面。当用户向表格添加数据时&#xff0c;JavaS…

Prometheus中添加基本身份验证功能

在Prometheus中添加基本身份验证功能&#xff0c;可以按照以下步骤进行&#xff1a; 一、生成哈希密码 首先&#xff0c;需要安装bcrypt工具&#xff0c;用于生成哈希密码。这可以通过Python的bcrypt库来完成。如果未安装&#xff0c;可以使用pip进行安装。 创建一个Python脚…