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<int> &height) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
stack<int> heightIndex;
stack<int> widthIndex;
int maxSum = 0;
int width;
int lastIndex;
int i = 0;
for(i = 0;i<height.size();i++)
{
lastIndex = i;
while(!heightIndex.empty() && height[i]<height[heightIndex.top()] )
{
width = i - widthIndex.top();
lastIndex = widthIndex.top();
maxSum = max(maxSum,width*height[heightIndex.top()]);
heightIndex.pop();
widthIndex.pop();
}
widthIndex.push(lastIndex);
heightIndex.push(i);
}
while(!heightIndex.empty())
{
width = i - widthIndex.top();
maxSum = max(maxSum,width*height[heightIndex.top()]);
heightIndex.pop();
widthIndex.pop();
}
return maxSum;
}
};