1. 程式人生 > >Leetcode No.84 **

Leetcode No.84 **

輸出 示例 單位 ima ack ges 其中 sign height

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

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

技術分享圖片

技術分享圖片

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

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

示例:

輸入: [2,1,5,6,2,3]
輸出: 10

解答:本題可以用堆棧來進行處理。為了更好的處理數據,本題采用順序遞增棧來處理。為了能夠處理最後一個高度,我們做了個小處理,首先給棧 s 壓入值 0 。具體邏輯如下:
【1】如果直方圖高度依次遞增,那麽就依次壓入直方圖的index;
【2】如果直方圖不符合遞增,那麽開始處理數據:res = max(res , 最小高度 * 距離);


//84
int largestRectangleArea(vector<int> &height)
{
    int res=0;
    stack<int> s;
    height.push_back(0);//in order to accumulate the last number: height[n]
    for(int i=0;i<(signed)height.size();i++)
    {
        if(s.empty() || height[i]>height[s.top()]) s.push(i);
        
else { int curr = s.top(); s.pop(); res = max(res,height[curr]* (s.empty()? i:i-s.top()-1)); i--; } } return res; }//84

Leetcode No.84 **