Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.
Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3]
.
The largest rectangle is shown in the shaded area, which has area = 10
unit.
For example,
Given height = [2,1,5,6,2,3]
,
return 10
.
维护一个不减栈,注意在height最后压入0,迫使栈的全部元素弹出。
class Solution {
public:
int largestRectangleArea(vector<int> &height) {
height.push_back(0);
stack<int> stk;
int i=0,maxArea=0;
while(i<height.size())
{
if(stk.empty()||height[i]>=height[stk.top()])
stk.push(i++);
else{
int t = stk.top();
stk.pop();
maxArea = max(maxArea, height[t] * (stk.e mpty() ? i : i - stk.top()-1));
}
}
return maxArea;
}
};