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
.
http://blog.csdn.net/doc_sgl/article/details/11805519
这篇分析写得很好
class Solution {
public:
int largestRectangleArea(vector<int> &height) {
stack< int> stk;
height.push_back(0);
int res = 0;
for( int i = 0; i < height.size(); ){
if( stk.empty() || height[i] >= height[stk.top()]){
stk.push(i++);
}
else{
int tmp = stk.top();
stk.pop();
res = max( res, height[tmp] * ( stk.empty() ? i : i - stk.top() - 1));
}
}
return res;
}
};