LeetCode Largest Rectangle in Histogram (单一栈)

LeetCode 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.

LeetCode Largest Rectangle in Histogram (单一栈)

Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3].

LeetCode Largest Rectangle in Histogram (单一栈)

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