diff --git a/src/main/java/com/cool/hot100/graph/Num994.java b/src/main/java/com/cool/hot100/graph/Num994.java new file mode 100644 index 0000000..febbc4d --- /dev/null +++ b/src/main/java/com/cool/hot100/graph/Num994.java @@ -0,0 +1,65 @@ +package com.cool.hot100.graph; + +import java.util.ArrayDeque; +import java.util.HashMap; +import java.util.Map; +import java.util.Queue; + +/** + * Created with IntelliJ IDEA. + * + * @Author: Cool + * @Date: 2024/09/03/14:25 + * DayNumber 3 + * Hard 2 + * Level ? + */ +public class Num994 { + + int[] rowChange = new int[] { 0, 1, -1, 0 }; + int[] columnChange = new int[] { 1, 0, 0, -1 }; + + public int orangesRotting(int[][] grid) { + int rowLength = grid.length; + int columnLength = grid[0].length; + Queue queue = new ArrayDeque<>(); + Map map = new HashMap<>(); + for (int i = 0; i < rowLength; i++) { + for (int j = 0; j < columnLength; j++) { + if (grid[i][j] == 2) { + int code = i * columnLength + j; + queue.add(code); + map.put(code, 0); + } + } + } + int res = 0; + while (!queue.isEmpty()) { + Integer code = queue.poll(); + int row = code / columnLength; + int column = code % columnLength; + for (int i = 0; i < 4; i++) { + int cRow = row + rowChange[i]; + int cColumn = column + columnChange[i]; + if (cRow >= 0 && cRow < rowLength && cColumn >= 0 && cColumn < columnLength + && grid[cRow][cColumn] == 1) { + grid[cRow][cColumn] = 2; + + int cCode = cRow * columnLength + cColumn; + queue.add(cCode); + map.put(cCode, map.get(code) + 1); + res = map.get(cCode); + } + } + } + for (int[] ints : grid) { + for (int j = 0; j < columnLength; j++) { + if (ints[j] == 1) { + return -1; + } + } + } + return res; + } + +}