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) {
height.push_back(0);
int n = height.size();
stack<int> s;
int i = 0, max_a = 0;
while (i < n) {
if (s.empty() || height[i] >= height[s.top()]) s.push(i++);
else {
int h = s.top(); s.pop();
max_a = max(max_a, height[h] * (s.empty() ? i : i - s.top() - 1));
}
}
return max_a;
}
};