当前位置: 首页 > news >正文

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

目录

  • 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.mrgr.cn/news/12067.html

相关文章:

  • Vue笔记总结(Xmind格式):第二天
  • 【编码解码】CyberChef v10.18.9
  • 《深入浅出WPF》读书笔记.8路由事件
  • 小程序wx:if 和hidden的区别
  • 内存管理篇-13slab、slob和slub分配器
  • 使用Python进行Mock测试详解(含Web API接口Mock)
  • 牛客小白月赛99(A,B,C,D,E,F,G)
  • ios去水印软件免费版,精选五大高效工具,告别水印烦恼!
  • 基于SSM+小程序民宿短租管理系统(民宿1)(源码+sql脚本+视频导入教程+文档)
  • 【STM32】MDK安装
  • 区块链(币圈)常用网址大全
  • Ubuntu下安装NVIDIA-SMI
  • C++:Github开源7.8Kstar的线程池介绍
  • 考研备考是选择电子学习工具无纸化学习?还是纸质版训练考感?
  • 学习笔记——后端项目中的相关技术 【随时更新】
  • x264 编码器 AArch64汇编系列:运动补偿之像素均值处理函数
  • 链表OJ题——使用栈实现单链表的逆序打印
  • 本地运行 AI 有多慢 ? 大模型推理测速 (llama.cpp, Intel GPU A770)
  • 基于STM32设计的校园智慧路灯系统(华为云IOT)(212)
  • 【深度学习】OCR,CLIP4STR论文,多模态OCR