[LeetCode]84. Largest Rectangle in Histogram

https://leetcode.com/problems/largest-rectangle-in-histogram/

找到柱状图之中的最大矩形面积


找出以heights[i]为最小长度的矩形面积可得结果。这个矩形的面积为heights[i] * i位置左右两侧第一个小于heights[i]的位置差(不将晓宇height[i]的这两个左右位置记入宽中,因此为i - j - 1)。如何找到左右两边小于heights[i]的位置呢?当前遍历到的比heights[i]小的位置就是右侧index,用stack保存一个升序序列当前栈顶就是左侧index。而heights[i]为当前栈pop出的元素。最后要用一个0把stack里面的所有元素全部pop出来,计算出以其为最小长度的矩形面积。

public class Solution {
    public int largestRectangleArea(int[] heights) {
        // 始终保持升序序列
        Stack<Integer> stack = new Stack();
        int res = 0;
        for (int i = 0; i <= heights.length; i++) {
            int height = i == heights.length ? 0 : heights[i];
            while (!stack.isEmpty() && height <= heights[stack.peek()]) {
                int h = heights[stack.pop()];
                int j = stack.isEmpty() ? -1 : stack.peek();
                res = Math.max(res, h * (i - j - 1));
            }
            stack.push(i);
        }
        return res;
    }
}


阅读更多
个人分类: LeetCode
想对作者说点什么? 我来说一句

LeetCode Largest Rectangle in Histogram

2015年06月22日 2.67MB 下载

没有更多推荐了,返回首页

不良信息举报

[LeetCode]84. Largest Rectangle in Histogram

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭