柱狀圖中最大的矩形

1,原文地址

https://leetcode-cn.com/problems/largest-rectangle-in-histogram/

2,題目

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度爲 1 。

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

以上是柱狀圖的示例,其中每個柱子的寬度爲 1,給定的高度爲 [2,1,5,6,2,3]。

圖中陰影部分爲所能勾勒出的最大矩形面積,其面積爲 10 個單位。

3,源碼:

核心思路:

核心還是先遍歷棒子,找出棒子的右邊界。
針對那些暫時找不到右邊界的棒子,先放入棧中暫存。
最後再遍歷棧。

class Solution {
    public int largestRectangleArea(int[] heights) {
        Stack<Integer> stack = new Stack<>();
        stack.push(-1);
        int maxArea = 0;

        //先遍歷一遍,找出當前的棒子的右邊界
        for(int i = 0;i<heights.length;i++){
            while (stack.peek() != -1 && heights[stack.peek()] > heights[i]){
                maxArea = Math.max(maxArea,heights[stack.pop()]*(i-stack.peek() -1));
            }

            stack.push(i);
        }

        //找出剩下棒子的邊界
        while (stack.peek() !=-1){
            maxArea = Math.max(maxArea,heights[stack.pop()]* (heights.length-stack.peek()-1));
        }

        return maxArea;

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章