Largest Rectangle in Histogram
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
.
O(n) solution.Calculate the number of left and right rectangles greater than or equal to the rectangle.
Solution:
class Solution {
public:
int largestRectangleArea(vector<int> &height) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(height.empty())
return 0;
vector<int> left;
vector<int> right;
stack<int> tmp;
for(int i=0;i<height.size();++i){
while(!tmp.empty()&&height[tmp.top()]>=height[i])
tmp.pop();
left.push_back(tmp.empty()?i:i-tmp.top()-1);
tmp.push(i);
}
tmp=stack<int>();
for(int i=height.size()-1;i>=0;--i){
while(!tmp.empty()&&height[tmp.top()]>=height[i])
tmp.pop();
right.push_back(tmp.empty()?height.size()-1-i:tmp.top()-i-1);
tmp.push(i);
}
int mymax=0;
for(int i=0;i<height.size();++i){
mymax=max(mymax,height[i]*(right[height.size()-1-i]+left[i]+1));
}
return mymax;
}
};