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> stack = new Stack<Integer>(); int i = 0; int maxArea = 0; int[] tmp = Arrays.copyOf(height, height.length+1); while (i < tmp.length) { if (stack.isEmpty() || tmp[stack.peek()] <= tmp[i]) { stack.push(i++); } else { int t = stack.pop(); maxArea = Math.max(maxArea, tmp[t]*(stack.isEmpty() ? i: (i-stack.peek()-1))); } } return maxArea; } }