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 heights = [2,1,5,6,2,3],
return 10.
参考(知其所以然之永不遗忘的算法)[http://blog.jobbole.com/106819/]的分析,代码如下:
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
vector<int> h(heights.begin(), heights.end());
h.push_back(0);
int maxSize = h[0];
stack<int> iStack;
int i = 0;
while(i < h.size()){
int curHeight = h[i];
if(iStack.empty() || (curHeight > h[iStack.top()])){
iStack.push(i++);
}else{
int barHeight = h[iStack.top()];
iStack.pop();
int width = (iStack.empty() ? i: i-iStack.top()-1);
maxSize = max(maxSize,barHeight* width);
}
}
return maxSize;
}
};