【Hot100】LeetCode—994. 腐烂的橘子

news2024/9/21 2:44:07

目录

  • 1- 思路
    • BFS+Queue队列
  • 2- 实现
    • ⭐994. 腐烂的橘子——题解思路
  • 3- ACM 实现


  • 题目连接:994. 腐烂的橘子

1- 思路

BFS+Queue队列

思路:先 ①遍历存储腐烂橘子的下标、②

  • ① 队列的作用:Queue<int[]> queue = new LinkedList<>()存储腐烂橘子的坐标
  • ② BFS思路
    • 根据队列非空,和 cur > 0 的时候
    • 遍历 Queue : 中的坐标,实现BFS 四个方向的腐烂

2- 实现

⭐994. 腐烂的橘子——题解思路

在这里插入图片描述

class Solution {
    public int orangesRotting(int[][] grid) {
        // 1. 数据结构
        int round = 0;
        int fresh = 0;
        Queue<int[]> queue = new LinkedList<>();

        int row = grid.length;
        int col = grid[0].length;
        // 2. 遍历收集 queue的结果
        for(int i = 0 ; i < row;i++){
            for(int j = 0 ; j < col ;j++){
                if(grid[i][j] == 1){
                    fresh++;
                }
                if(grid[i][j] == 2){
                    queue.add(new int[]{i,j});
                }
            }
        }

        int[][] directions = {{0,1},{1,0},{0,-1},{-1,0}};
        while(!queue.isEmpty() && fresh>0){
            int n = queue.size();
            for(int j = 0; j < n ;j++){
                int[] cur = queue.poll();
                int nowX = cur[0];
                int nowY = cur[1];

                for(int z = 0 ; z < 4 ;z++){
                    int newX = nowX + directions[z][0];
                    int newY = nowY + directions[z][1];
                    if(newX>=0 && newX< row && newY>=0 && newY<col && grid[newX][newY] ==1 ){
                        grid[newX][newY] = 2;
                        queue.offer(new int[]{newX,newY});
                        fresh--;
                    }
                }
            }
            round++;
        }

        if(fresh==0) return round;
        return -1;
    }
}

3- ACM 实现

public class rotOrange {


    public static int orange(int[][] grid){
        // 数据结构
        int row = grid.length;
        int col = grid[0].length;

        Queue<int[]> queue = new LinkedList<>();
        int round = 0;
        int fresh = 0;
        // 遍历记录腐烂橘子坐标
        for(int i = 0 ; i < row;i++){
            for(int j = 0 ; j < col;j++){
                if(grid[i][j] == 1){
                    fresh++;
                }
                if(grid[i][j] == 2){
                    queue.add(new int[]{i,j});
                }
            }
        }
        int[][] dir = {{0,1},{1,0},{-1,0},{0,-1}};
        // 遍历腐烂的橘子
        while(!queue.isEmpty() && fresh>0){
            // 定义 n 遍历
            int n = queue.size();
            for(int i = 0 ; i < n;i++){
                int[] now = queue.poll();
                int nowX = now[0];
                int nowY = now[1];
                for(int j = 0 ; j <4;j++){
                    int newX = nowX + dir[j][0];
                    int newY = nowY + dir[j][1];
                    if(newX>=0 && newX< row && newY>=0 && newY<col && grid[newX][newY] == 1){
                        grid[newX][newY] = 2;
                        queue.offer(new int[]{newX,newY});
                        fresh--;
                    }
                }
            }
            round++;
        }
        if(fresh==0) return round;
        return -1;
    }

    public static void main(String[] args) {
        // 处理输入
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        input = input.substring(2,input.length()-2);
        String[] rows = input.split("\\],\\[");
        int m = rows.length;
        int n = rows[0].split(",").length;
        int[][] grid = new int[m][n];
        for(int i = 0 ; i < m;i++){
            String[] row = rows[i].split(",");
            for(int j = 0 ; j < n ;j++){
                grid[i][j] = Integer.parseInt(row[j]);
            }
        }
        System.out.println("结果是"+orange(grid));
    }
}

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

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

相关文章

如何在没有屏幕时间密码或 Apple ID 的情况下重置 iPhone

忘记屏幕时间密码或 Apple ID 可能会令人沮丧&#xff0c;尤其是当您尝试重置 iPhone 时。无论您是出售设备、传承设备&#xff0c;还是只需要重新开始&#xff0c;知道如何在没有屏幕时间密码的情况下重置 iPhone都是必不可少的。 幸运的是&#xff0c;有几种方法可以帮助您在…

基于STM32开发的智能家居语音控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化语音识别处理设备控制与状态显示Wi-Fi通信与远程控制应用场景 家庭环境的语音控制办公室的智能化管理常见问题及解决方案 常见问题解决方案结论 1. 引言 随着人工智能技术的发展&…

Node-RED订阅巴法云的数据并展示

目录 订阅巴法云数据 添加 MQTT订阅 添加模板 使用MQTTX模拟数据产生 调试信息 使用Dashboard进行数据展示 添加Dashboard模块 最终展示效果 在前面的博文Node-RED的安装-CSDN博客和使用Node-RED发送数据到巴法云-CSDN博客&#xff0c;我已经介绍了Node-RED的简单用法&…

博弈论(Nim游戏的扩展)

公平组合游戏ICG 若一个游戏满足: 1.由两名玩家交替行动; 2.在游戏进程的任意时刻&#xff0c;可以执行的合法行动与轮到哪名玩家无关; 3.不能行动的玩家判负; 则称该游戏为一个公平组合游戏。 NIM博弈属于公平组合游戏&#xff0c;但城建的棋类游戏&#xff0c;比如围棋&…

【Python机器学习】NLP分词——词的“情感”

目录 VADER&#xff1a;一个基于规则的情感分析器 朴素贝叶斯 无论NLP流水线中使用的是单个词、n-gram、词干还是词元作为词条&#xff0c;每个词条都包含了一些信息&#xff0c;这些信息中一个重要部分是词的情感&#xff0c;即一个词所唤起的总体感觉或感情。这种度量短语或…

XOR 已知明文攻击

在这篇博文中,我们详细展示了*针对 XOR 编码的*已知明文攻击是如何进行的,并使用自定义工具自动执行该攻击,以解密和提取 Cobalt Strike 信标的配置。如果您对理论不感兴趣,只对工具感兴趣,请直接跳到结论! 已知明文攻击 (KPA) 是一种密码分析方法,分析人员拥有消息的明文…

【设计模式-装饰】

定义 装饰模式是一种结构型设计模式&#xff0c;它允许在不改变对象自身的前提下动态地给对象添加职责&#xff08;功能&#xff09;。通过使用装饰模式&#xff0c;可以将对象的功能扩展变得更加灵活和可维护&#xff0c;同时避免了类继承的复杂性。 特点 动态扩展对象功能…

猫咪浮毛满天飞?希喂、IAM、352三款宠物空气净化器测试对比

我作为一名养宠三年的铲屎官&#xff0c;用过不少清理工具&#xff0c;可惜都效果不佳。经过朋友的推荐&#xff0c;我了解到宠物空气净化器这种产品&#xff0c;想要购入使用。在挑选时我发现&#xff0c;目前市面上宠物空气净化器品牌繁多&#xff0c;质量难辨。因此&#xf…

【iOS端】基于Uniapp跨平台接入即构RTC+相芯美颜

0 Uniapp平台接入完成iOS端的即构RTC相芯美颜 Uniapp最大优势是跨平台&#xff0c;前面介绍了如何在android中接入相芯美颜即构RTC&#xff0c;今天咱们把相同的代码接入到iOS中。按照惯例我们先看最终效果&#xff0c;欢迎大家评论讨论&#xff1a; 1 开发配置准备 iOS开发因…

YOLOv8目标检测部署RK3588全过程,附代码pt->onnx->rknn,附【详细代码】

目录 一、训练yolov8模型&#xff0c;得到最佳权重文件best.pt 二、pt转onnx,即best.pt->best11.onnx 1、对下载的YOLOv8代码修改 2、加入模型导出功能&#xff0c; 3、导出指令采用如下代码 三、ONNX转RKNN 四、RK3588部署 1、拷贝rknn文件到rk3588板子内 2、执行…

.NET6 多环境 在Windows IIS部署的应用场景

前言&#xff1a; 通常情况下 我们部署Web站点 需要用到 测试环境 和 正式环境 2个环境 Staging环境 或者其他环境 视 团队所处阶段、团队规模、质量要求、风险控制要求、第3方协议而定 1.我们把上一讲 IX.MultiEnvironment 这个项目发布到IIS中 2.IIS配置3个环境 我们重点…

MathType2025最新破解版补丁包+永久免费安装包win+mac系统

有一类笔记特别受欢迎&#xff0c;那就是“数学公式的排版”。这些笔记通常以图文并茂的方式&#xff0c;展示了如何使用各种工具来排版数学公式。其中&#xff0c;MathType 7 是最受欢迎的工具之一&#xff0c;它不仅功能强大、使用方便&#xff0c;还能让你轻松地制作出精美的…

Tailor:免费开源 AI 视频神器,创作者必备利器

目录 引言一、创新特性&#xff0c;引领视频编辑新潮流1. 智能人脸剪辑2. 精准语音剪辑3. 自动化口播生成4. 多样化字幕生成5. 一键式色彩生成 二、简单易用&#xff0c;新手也能快速上手1. 下载和安装2. 功能选择3. 操作流程 三、广泛应用&#xff0c;满足不同创作需求四、代码…

别让语法拖后腿:ChatGPT助你告别改稿噩梦!【建议收藏】

学术论文的撰写是研究成果传播的关键。清晰、准确、逻辑严密的表达对于学术论文的质量至关重要。人工智能技术的快速发展&#xff0c;尤其是ChatGPT 4.0的推出&#xff0c;为学术写作提供了新的辅助工具。本文将探讨如何有效利用ChatGPT 4.0进行论文润色。 ChatGPT&#xff1a…

线性代数:如何由AB=E 推出 BA=AB?

最近在二刷线性代数&#xff0c;在看逆矩阵定义的时候发现了这个问题。于是决定写一写&#xff0c;给出一种证明方式。 一、由逆矩阵的定义出发 这是我在mooc-山东大学-线性代数&#xff08;秦静老师&#xff09;第一章第十讲的ppt上截取的定义。 看到这个定义我就在想&#xf…

如何在Java中使用protobuf

写在前面 本文看下在Java中如何使用protofbuf。 1&#xff1a;介绍 1.1&#xff1a;什么是protobuf 是一种数据格式&#xff0c;同json&#xff0c;xml&#xff0c;等。但是一种二进制数据格式。 1.2&#xff1a;强在哪里&#xff1f;为啥要用&#xff1f; 小&#xff0c…

图新说-调整标绘线面的压盖顺序的两种方法

0.序 图新说作为一个三维可视化汇报工具&#xff0c;在公安消防领域常用于做态势标绘&#xff0c;应急救援方案&#xff0c;安保预案等。 如果撤离路线&#xff0c;或者行进路线【线对象】经过了水源地、危险区等【面对象】。如何确保线对象显示在面对象的上面&#xff0c;不被…

MyBatis中的占位符解析机制

深入理解 MyBatis 中的 #{} 占位符解析机制 在使用 MyBatis 进行数据库操作时&#xff0c;#{} 占位符是我们非常常用的一个特性。它能够将 Java 对象的属性值与 SQL 语句中的参数进行映射。在实际使用中&#xff0c;MyBatis 如何解析 #{} 占位符并获取对应的属性值呢&#xff…

如何实现低成本降噪?风扇噪声流体仿真解决方案

本文将说明工程师如何能够使用气动解决方案来模拟和降低一款小型发电机柜冷却风扇的噪音。ultraFluidX 的模拟结果将设备内部的流场和声场可视化&#xff0c;研究风扇和机柜内其他部件的相互作用&#xff0c;确认噪声源来自何处&#xff08;协助工程师采取有效的降噪措施&#…

Mybatis中的缓存

一&#xff0c;为什么要使用缓存 1&#xff0c;缓存的作用 缓存(cache&#xff09;的作用是为了减去数据库的压力&#xff0c;提高查询性能。 缓存实现的原理是 从数据库中查询出来的对象在使用完后不要销毁&#xff0c;而是存储在内存&#xff08;缓存&#xff09; 中&#…