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
.
class Solution {
public:
int largestRectangleArea(vector
& height) {
if(height.size()==0)
return 0;
int ret=0;
stack
st;
height.push_back(0);// 为了最后一个入栈
for(int i=0;i
height[st.top()]) st.push(i);
else{
int tmp=st.top();
st.pop();
ret=max(ret,height[tmp]*(st.empty()?i:i-1-st.top())); //因为不包括i,所以i-1-st.top();又因为i是从0开始所以st为空的时候宽就是i
i--;//i还没入栈处理,否则后面的i++ 就把i跳过了,所以先--
}
}
return ret;
}
};