国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【圖論】Leetcode 994. 腐爛的橘子【中等】

這篇具有很好參考價值的文章主要介紹了【圖論】Leetcode 994. 腐爛的橘子【中等】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

腐爛的橘子

在給定的 m x n 網(wǎng)格 grid 中,每個單元格可以有以下三個值之一:

  • 值 0 代表空單元格;
  • 值 1 代表新鮮橘子;
  • 值 2 代表腐爛的橘子。
    每分鐘,腐爛的橘子 周圍 4 個方向上相鄰 的新鮮橘子都會腐爛。

返回 直到單元格中沒有新鮮橘子為止所必須經(jīng)過的最小分鐘數(shù)。如果不可能,返回 -1 。

示例1:
【圖論】Leetcode 994. 腐爛的橘子【中等】,算法,圖論,leetcode,java
輸入:grid = [[2,1,1],[1,1,0],[0,1,1]]
輸出: 4

解題思路

使用廣度優(yōu)先搜索(BFS)算法來模擬腐爛的橘子的傳播過程。
PS: 廣度優(yōu)先搜索(BFS)算法一般使用
Queue queue = new LinkedList<>();
搭配 while(!queue.isEmpty())來實現(xiàn)
因為隊列的先進先出(FIFO)特性恰好符合 BFS 的搜索順序。

  • 1、遍歷整個網(wǎng)格,將腐爛的橘子的坐標(biāo)加入隊列,并統(tǒng)計新鮮橘子的數(shù)量。
  • 2、在隊列不為空的情況下,從隊列中取出腐爛的橘子,將其周圍未腐爛的橘子腐爛,并將其坐標(biāo)加入隊列。
  • 3、每次從隊列中取出橘子時,時間變量加一。
  • 4、在每次遍歷完整個隊列時,檢查是否還有新鮮橘子沒有被腐爛。
  • 如果有,則返回 -1。
  • 如果沒有,則返回時間變量減一,因為最后一個橘子腐爛不需要再等待一分鐘。

Java實現(xiàn)

public class RottingOranges {
    public int orangesRotting(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
        int freshOranges = 0; // 記錄新鮮橘子的數(shù)量
        Queue<int[]> queue = new LinkedList<>(); // 用于存儲腐爛的橘子的位置

        // 統(tǒng)計新鮮橘子的數(shù)量,并將腐爛的橘子加入隊列
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid[i][j] == 1) {
                    freshOranges++;
                } else if (grid[i][j] == 2) {
                    queue.offer(new int[]{i, j});
                }
            }
        }

        int minutes = 0; // 記錄經(jīng)過的分鐘數(shù)
        int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; // 上下左右四個方向

        // 開始進行 BFS,直到隊列為空或者沒有新鮮橘子為止
        while (!queue.isEmpty() && freshOranges > 0) {
            int size = queue.size();
            //當(dāng)前腐爛的桔子
            for (int i = 0; i < size; i++) {
                int[] curr = queue.poll();
                //計算上下左右腐爛的桔子
                for (int[] dir : directions) {
                    int newX = curr[0] + dir[0];
                    int newY = curr[1] + dir[1];
                    if (newX >= 0 && newX < m && newY >= 0 && newY < n && grid[newX][newY] == 1) {
                        grid[newX][newY] = 2; // 標(biāo)記為腐爛的橘子
                        queue.offer(new int[]{newX, newY});
                        freshOranges--; // 每腐爛一個橘子,新鮮橘子數(shù)量減一
                    }
                }
            }
            minutes++; // 經(jīng)過一分鐘
        }

        return freshOranges == 0 ? minutes : -1;
    }

    public static void main(String[] args) {
        RottingOranges oranges = new RottingOranges();
        int[][] grid = {
            {2, 1, 1},
            {1, 1, 0},
            {0, 1, 2}
        };
        System.out.println("Minimum minutes required: " + oranges.orangesRotting(grid));
    }
}

時間空間復(fù)雜度

  • 時間復(fù)雜度:O(m * n),其中 m 和 n 分別是網(wǎng)格的行數(shù)和列數(shù),因為需要遍歷整個網(wǎng)格。

  • 空間復(fù)雜度:O(m * n),在最壞的情況下,隊列的大小可能會達到網(wǎng)格中所有新鮮橘子的數(shù)量,因此空間復(fù)雜度是 O(m * n)。文章來源地址http://www.zghlxwxcb.cn/news/detail-852663.html

到了這里,關(guān)于【圖論】Leetcode 994. 腐爛的橘子【中等】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【圖論】Leetcode 207. 課程表【中等】

    你這個學(xué)期必須選修 numCourses 門課程,記為 0 到 numCourses - 1 。 在選修某些課程之前需要一些先修課程。 先修課程按數(shù)組 prerequisites 給出,其中 prerequisites[i] = [ai, bi] ,表示如果要學(xué)習(xí)課程 ai 則 必須 先學(xué)習(xí)課程 bi 。 例如,先修課程對 [0, 1] 表示:想要學(xué)習(xí)課程 0 ,你需要先

    2024年04月14日
    瀏覽(26)
  • 【圖論】Leetcode 208. 實現(xiàn) Trie (前綴樹)【中等】

    Trie (發(fā)音類似 “try”)或者說 前綴樹 是一種樹形數(shù)據(jù)結(jié)構(gòu),用于高效地存儲和檢索字符串?dāng)?shù)據(jù)集中的鍵。這一數(shù)據(jù)結(jié)構(gòu)有相當(dāng)多的應(yīng)用情景,例如自動補完和拼寫檢查。 請你實現(xiàn) Trie 類: Trie() 初始化前綴樹對象。 void insert(String word) 向前綴樹中插入字符串 word 。 boolean

    2024年04月16日
    瀏覽(20)
  • 每天一道leetcode:542. 01 矩陣(圖論&中等&廣度優(yōu)先遍歷)

    每天一道leetcode:542. 01 矩陣(圖論&中等&廣度優(yōu)先遍歷)

    給定一個由 0 和 1 組成的矩陣 mat ,請輸出一個大小相同的矩陣,其中每一個格子是 mat 中對應(yīng)位置元素到最近的 0 的距離。 兩個相鄰元素間的距離為 1 。 m == mat.length n == mat[i].length 1 = m, n = 104 1 = m * n = 104 mat[i][j] is either 0 or 1. mat 中至少有一個 0 找到距離當(dāng)前位置最近的0,有

    2024年02月11日
    瀏覽(17)
  • 每天一道leetcode:1466. 重新規(guī)劃路線(圖論&中等&廣度優(yōu)先遍歷)

    每天一道leetcode:1466. 重新規(guī)劃路線(圖論&中等&廣度優(yōu)先遍歷)

    n 座城市,從 0 到 n-1 編號,其間共有 n-1 條路線。因此,要想在兩座不同城市之間旅行只有唯一一條路線可供選擇(路線網(wǎng)形成一顆樹)。去年,交通運輸部決定重新規(guī)劃路線,以改變交通擁堵的狀況。 路線用 connections 表示,其中 connections[i] = [a, b] 表示從城市 a 到 b 的一條

    2024年02月12日
    瀏覽(20)
  • 每天一道leetcode:934. 最短的橋(圖論&中等&廣度優(yōu)先遍歷)

    每天一道leetcode:934. 最短的橋(圖論&中等&廣度優(yōu)先遍歷)

    給你一個大小為 n x n 的二元矩陣 grid ,其中 1 表示陸地, 0 表示水域。 島 是由四面相連的 1 形成的一個最大組,即不會與非組內(nèi)的任何其他 1 相連。 grid 中 恰好存在兩座島 。 你可以將任意數(shù)量的 0 變?yōu)?1 ,以使兩座島連接起來,變成 一座島 。 返回必須翻轉(zhuǎn)的 0 的最小數(shù)

    2024年02月12日
    瀏覽(22)
  • 每天一道leetcode:433. 最小基因變化(圖論&中等&廣度優(yōu)先遍歷)

    每天一道leetcode:433. 最小基因變化(圖論&中等&廣度優(yōu)先遍歷)

    基因序列可以表示為一條由 8 個字符組成的字符串,其中每個字符都是 \\\'A\\\' 、 \\\'C\\\' 、 \\\'G\\\' 和 \\\'T\\\' 之一。 假設(shè)我們需要調(diào)查從基因序列 start 變?yōu)?end 所發(fā)生的基因變化。一次基因變化就意味著這個基因序列中的一個字符發(fā)生了變化。 例如, \\\"AACCGGTT\\\" -- \\\"AACCGGTA\\\" 就是一次基因變化。

    2024年02月12日
    瀏覽(26)
  • 每天一道leetcode:1306. 跳躍游戲 III(圖論&中等&廣度優(yōu)先遍歷)

    每天一道leetcode:1306. 跳躍游戲 III(圖論&中等&廣度優(yōu)先遍歷)

    這里有一個非負整數(shù)數(shù)組 `arr`,你最開始位于該數(shù)組的起始下標(biāo) `start` 處。當(dāng)你位于下標(biāo) `i` 處時,你可以跳到 `i + arr[i]` 或者 `i - arr[i]`。 請你判斷自己是否能夠跳到對應(yīng)元素值為 0 的 **任一** 下標(biāo)處。 注意,不管是什么情況下,你都無法跳到數(shù)組之外。 ``` 輸入:arr = [4,

    2024年02月12日
    瀏覽(26)
  • 每天一道leetcode:797. 所有可能的路徑(圖論&中等&深度優(yōu)先遍歷)

    每天一道leetcode:797. 所有可能的路徑(圖論&中等&深度優(yōu)先遍歷)

    給你一個有 n 個節(jié)點的 有向無環(huán)圖(DAG) ,請你找出所有從節(jié)點 0 到節(jié)點 n-1 的路徑并輸出( 不要求按特定順序 ) graph[i] 是一個從節(jié)點 i 可以訪問的所有節(jié)點的列表(即從節(jié)點 i 到節(jié)點 graph[i][j] 存在一條有向邊)。 n == graph.length 2 = n = 15 0 = graph[i][j] n graph[i][j] != i (即不存

    2024年02月12日
    瀏覽(22)
  • [Java·算法·中等] LeetCode122. 買股票的最佳時機 II 解讀

    [Java·算法·中等] LeetCode122. 買股票的最佳時機 II 解讀

    人不走空 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? 目錄 ? ????????個人主頁:人不走空?????? ??系列專欄:算法專題 ?詩詞歌賦:斯是陋室,惟吾德馨 題目 示例 示例1 示例2 示例3? 提示? 詳細解讀 作者其他作品: ? 給你一

    2024年02月19日
    瀏覽(21)
  • 每天一道leetcode:1129. 顏色交替的最短路徑(圖論&中等&廣度優(yōu)先遍歷)

    每天一道leetcode:1129. 顏色交替的最短路徑(圖論&中等&廣度優(yōu)先遍歷)

    給定一個整數(shù) n ,即有向圖中的節(jié)點數(shù),其中節(jié)點標(biāo)記為 0 到 n - 1 。圖中的每條邊為紅色或者藍色,并且可能存在自環(huán)或平行邊。 給定兩個數(shù)組 redEdges 和 blueEdges ,其中: redEdges[i] = [ai, bi] 表示圖中存在一條從節(jié)點 ai 到節(jié)點 bi 的紅色有向邊, blueEdges[j] = [uj, vj] 表示圖中存

    2024年02月13日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包