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
.
Subscribe to see which companies asked this question
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
vector<int> stack;
int len = heights.size();
if(len == 0) return 0;
int index = 0, max_area = 0;
heights.push_back(-1);
while (index <= len) {
if(stack.empty() || heights[index] >= heights[stack.back()]) {
stack.push_back(index);
index++;
} else {
int top = stack.back(), temp = 0;
stack.pop_back();
if(stack.empty()) {
temp = heights[top]*index;
} else {
temp = heights[top]*(index-stack.back()-1);
}
if(max_area < temp) max_area = temp;
}
}
return max_area;
}
};