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.


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;
    }
}


你可能感兴趣的:(Largest Rectangle in Histogram)