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

LeetCode 84. 柱狀圖中最大的矩形

這篇具有很好參考價(jià)值的文章主要介紹了LeetCode 84. 柱狀圖中最大的矩形。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

84. 柱狀圖中最大的矩形

給定?n?個(gè)非負(fù)整數(shù),用來表示柱狀圖中各個(gè)柱子的高度。每個(gè)柱子彼此相鄰,且寬度為 1 。

求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。

示例 1:

LeetCode 84. 柱狀圖中最大的矩形,LeetCode,leetcode,算法,數(shù)據(jù)結(jié)構(gòu),java

輸入:heights = [2,1,5,6,2,3]

輸出:10

解釋:最大的矩形為圖中紅色區(qū)域,面積為 10

示例 2:

LeetCode 84. 柱狀圖中最大的矩形,LeetCode,leetcode,算法,數(shù)據(jù)結(jié)構(gòu),java

輸入: heights = [2,4]

輸出: 4

提示:

  • 1 <= heights.length <=10^5
  • 0 <= heights[i] <= 10^4

解法思路(參考官方題解及視頻講解):

1、暴力1 O(n^3)

for i -> 0, n
    for j -> i, n
       (i, j) -> 最小高度,area
       update max-area

2、暴力2 O(n^2)

for i -> 0, n:
    找到 left bound, right bound
        area = height[i] * (right - left)
        update max-area

3、Stack

4、優(yōu)化 Stack,加哨兵元素

?法一(超時(shí)):

class Solution {
    public int largestRectangleArea(int[] heights) {
        // Time: O(n^3)
        // Space: O(1)
        int maxArea = 0;
        for (int i = 0; i < heights.length; i++) {
            for (int j = i; j < heights.length; j++) {
                int minHeight = Integer.MAX_VALUE;
                for (int k = i; k <= j; k++) {
                    minHeight = Math.min(minHeight, heights[k]);
                }
                maxArea = Math.max(maxArea, minHeight * (j - i + 1));
            }
        }
        return maxArea;
    }
}

法二(超時(shí)):

class Solution {
    public int largestRectangleArea(int[] heights) {
        // Time: O(n^2)
        // Space: O(1)
        int maxArea = 0;
        for (int i = 0; i < heights.length; i++) {
            int minHeight = Integer.MAX_VALUE;
            for (int j = i; j < heights.length; j++) {
                minHeight = Math.min(minHeight, heights[j]);
                maxArea = Math.max(maxArea, minHeight * (j - i + 1));
            }
        }
        return maxArea;
    }
}

法三:

class Solution {
    public int largestRectangleArea(int[] heights) {
        // Stack 空間換時(shí)間
        // 特殊情況1:遍歷完成后,棧內(nèi)元素出棧時(shí)一定可以擴(kuò)展到數(shù)組的末尾
        // 特殊情況2:彈出棧頂后棧為空,一定可以擴(kuò)散到數(shù)組最左邊
        // 特殊情況3:棧中存在高度相等的元素,出棧
        // Time: O(n)
        // Space: O(n)
        int len = heights.length;
        if (len == 0) return 0;
        if (len == 1) return heights[0];
        int maxArea = 0;
        Deque<Integer> stack = new ArrayDeque<>();
        for (int i = 0; i < len; i++) {
            // 當(dāng)前元素的高度嚴(yán)格小于棧頂元素的高度時(shí),出棧
            while (!stack.isEmpty() && heights[i] < heights[stack.peekLast()]) {
                int height = heights[stack.removeLast()];
                // 特殊情況3:棧中存在高度相等的元素,出棧
                while (!stack.isEmpty() && heights[stack.peekLast()] == height) {
                    stack.removeLast();
                }
                // 特殊情況2:彈出棧頂后棧為空,一定可以擴(kuò)散到數(shù)組最左邊
                int width = stack.isEmpty() ? i : (i - stack.peekLast() - 1);
                maxArea = Math.max(maxArea, width * height);
            }
            stack.addLast(i);
        }
        // 彈出棧中所有元素
        while (!stack.isEmpty()) {
            int height = heights[stack.removeLast()];
            while (!stack.isEmpty() && heights[stack.peekLast()] == height) {
                stack.removeLast();
            }
            // 特殊情況1:遍歷完成后,棧內(nèi)元素出棧時(shí)一定可以擴(kuò)展到數(shù)組的末尾
            int width = stack.isEmpty() ? len : (len - stack.peekLast() - 1);
            maxArea = Math.max(maxArea, width * height);
        }
        return maxArea;
    }
}

LeetCode 84. 柱狀圖中最大的矩形,LeetCode,leetcode,算法,數(shù)據(jù)結(jié)構(gòu),java

優(yōu)化法三:

class Solution {
    public int largestRectangleArea(int[] heights) {
        // Stack(add Sentinel)
        // Time: O(N)
        // Space: O(N)
        int len = heights.length;
        if (len == 0) return 0;
        if (len == 1) return heights[0];
        int maxArea = 0;
        int[] newHeights = new int[len + 2];
        for (int i = 0; i < len; i++) {
            newHeights[i + 1] = heights[i];
        }
        len += 2;
        heights = newHeights;
        Deque<Integer> stack = new ArrayDeque<Integer>();
        stack.addLast(0);
        for (int i = 1; i < len; i++) {
            while (heights[stack.peekLast()] > heights[i]) {
                int height = heights[stack.removeLast()];
                int width = i - stack.peekLast() - 1;
                maxArea = Math.max(maxArea, width * height);
            }
            stack.addLast(i);
        }
        return maxArea;
    }
}

LeetCode 84. 柱狀圖中最大的矩形,LeetCode,leetcode,算法,數(shù)據(jù)結(jié)構(gòu),java

?文章來源地址http://www.zghlxwxcb.cn/news/detail-775439.html

到了這里,關(guān)于LeetCode 84. 柱狀圖中最大的矩形的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • (力扣記錄)84. 柱狀圖中最大的矩形

    數(shù)據(jù)結(jié)構(gòu)類型: 棧 時(shí)間復(fù)雜度: O(N) 空間復(fù)雜度: O(N) 代碼實(shí)現(xiàn):

    2024年01月20日
    瀏覽(25)
  • 【力扣】84. 柱狀圖中最大的矩形 <模擬、雙指針、單調(diào)棧>

    【力扣】84. 柱狀圖中最大的矩形 <模擬、雙指針、單調(diào)棧>

    給定 n 個(gè)非負(fù)整數(shù),用來表示柱狀圖中各個(gè)柱子的高度。每個(gè)柱子彼此相鄰,且寬度為 1 。求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。 示例 1: 輸入:heights = [2,1,5,6,2,3] 輸出:10 解釋:最大的矩形為圖中紅色區(qū)域,面積為 10 示例 2: 輸入: heights = [2,4] 輸出: 4 提示

    2024年02月12日
    瀏覽(16)
  • 【算法練習(xí)Day51】柱狀圖中最大的矩形

    【算法練習(xí)Day51】柱狀圖中最大的矩形

    ???個(gè)人主頁:@Sherry的成長之路 ??學(xué)習(xí)社區(qū):Sherry的成長之路(個(gè)人社區(qū)) ??專欄鏈接:練題 ?? 長路漫漫浩浩,萬事皆有期待 力扣題目鏈接 給定 n 個(gè)非負(fù)整數(shù),用來表示柱狀圖中各個(gè)柱子的高度。每個(gè)柱子彼此相鄰,且寬度為 1 。 求在該柱狀圖中,能夠勾勒出來的矩

    2024年01月22日
    瀏覽(23)
  • OJ練習(xí)第101題——柱狀圖中最大的矩形

    OJ練習(xí)第101題——柱狀圖中最大的矩形

    力扣鏈接:84. 柱狀圖中最大的矩形 給定 n 個(gè)非負(fù)整數(shù),用來表示柱狀圖中各個(gè)柱子的高度。每個(gè)柱子彼此相鄰,且寬度為 1 。 求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。 我們先嵌套一層 while 循環(huán)來向左找到第一個(gè)比柱體 i 高度小的柱體,這個(gè)過程是 O(N) 的; 單調(diào)

    2024年02月04日
    瀏覽(23)
  • 吃透單調(diào)棧(2)——解兩道Hard題:接雨水、柱狀圖中最大的矩形問題

    吃透單調(diào)棧(2)——解兩道Hard題:接雨水、柱狀圖中最大的矩形問題

    這類題目的數(shù)據(jù)通常是一維數(shù)組,要尋找任一個(gè)元素的 右邊或者左邊 第一個(gè) 比自己 大 或者 小 的元素的位置(尋找 邊界 ) ,此時(shí)我們就要想到可以用單調(diào)棧了。 ? 這道題就是要求解每一個(gè)柱子左邊第一個(gè)比它高的柱子,以及右邊第一個(gè)比它高的柱子,然后這兩個(gè)柱子間

    2024年02月10日
    瀏覽(16)
  • 算法leetcode|85. 最大矩形(rust重拳出擊)

    算法leetcode|85. 最大矩形(rust重拳出擊)

    給定一個(gè)僅包含 0 和 1 、大小為 rows x cols 的二維二進(jìn)制矩陣,找出只包含 1 的最大矩形,并返回其面積。 rows == matrix.length cols == matrix[0].length 1 = row, cols = 200 matrix[i][j] 為 ‘0’ 或 ‘1’ 面對這道算法題目,二當(dāng)家的再次陷入了沉思。 要不是剛做過 84. 柱狀圖中最大的矩形 這

    2024年02月08日
    瀏覽(17)
  • 算法刷題Day 60 柱狀圖中的最大矩陣

    暴力解法 超時(shí)了 分別找出當(dāng)前位置左邊 第一個(gè) 比自己小的索引(的后一個(gè)位置)和右邊 第一個(gè) 比自己小的索引(的前一個(gè)位置),這個(gè)范圍之內(nèi),就是以當(dāng)前位置的高度所能達(dá)到的最大寬度。 單調(diào)棧 有了接雨水那道題的經(jīng)驗(yàn),這一道題可以模仿著做出了

    2024年02月14日
    瀏覽(21)
  • Leetcode 85. 最大矩形

    Leetcode 85. 最大矩形

    LeetoCode地址: 力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺 該題是84題的升級版。84題給出了一個(gè)一維數(shù)組,即一行數(shù)據(jù),每個(gè)元素是高度。而該題則是給出了二維數(shù)組,只需我們將每一行的高度自行求出,即可以運(yùn)用相同的算法解決。 該題目的難點(diǎn)在于思維模型上,如

    2024年02月20日
    瀏覽(20)
  • 【LeetCode】85.最大矩形

    【LeetCode】85.最大矩形

    給定一個(gè)僅包含? 0 ?和? 1 ?、大小為? rows x cols ?的二維二進(jìn)制矩陣,找出只包含? 1 ?的最大矩形,并返回其面積。 示例 1: 示例 2: 示例 3: 示例 4: 示例 5: 提示: rows == matrix.length cols == matrix[0].length 1 = row, cols = 200 matrix[i][j] ?為? \\\'0\\\' ?或? \\\'1\\\' 這題是建立在「84.柱形圖

    2024年02月10日
    瀏覽(18)
  • 【算法與數(shù)據(jù)結(jié)構(gòu)】654、LeetCode最大二叉樹

    【算法與數(shù)據(jù)結(jié)構(gòu)】654、LeetCode最大二叉樹

    所有的LeetCode題解索引,可以看這篇文章——【算法和數(shù)據(jù)結(jié)構(gòu)】LeetCode題解。 ?? 思路分析 :【算法與數(shù)據(jù)結(jié)構(gòu)】106、LeetCode從中序與后序遍歷序列構(gòu)造二叉樹這兩道題有些類似,相關(guān)代碼可以互相參考,本題明示了要用遞歸來做,那么遞歸三要素不可缺少: 輸入?yún)?shù)和返

    2024年02月09日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包