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
.
public class Solution {
public int largestRectangleArea(int[] height) {
Stack<Integer> heightStack = new Stack<>();
int max = 0;
int n = height.length;
if (n == 0) {
return 0;
}
Stack<Integer> leftStack = new Stack<>();
for (int i = 0; i <= n; i++) {
int h = i == n? 0 :height[i];
int left = i;
while (!heightStack.isEmpty() && h < heightStack.peek()) {
left = leftStack.pop();
max = Math.max(max, heightStack.peek() * (i - left));
heightStack.pop();
}
heightStack.add(h);
leftStack.add(left);
}
return max;
}
}