[LeetCode]84. Largest Rectangle in Histogram

来源:互联网 发布:下载荧光签名软件 编辑:程序博客网 时间:2024/06/05 12:44

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


0 0
原创粉丝点击