Leetcode No.84 **
阿新 • • 發佈:2019-05-08
輸出 示例 單位 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 **