美文网首页算法代码
柱状图中面积最大的矩形

柱状图中面积最大的矩形

作者: windUtterance | 来源:发表于2020-06-06 14:30 被阅读0次

    题目描述
    给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

    求在该柱状图中,能够勾勒出来的矩形的最大面积。
    示例

    image.png
    以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。
    image

    图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。
    输入: [2,1,5,6,2,3]
    输出: 10

    Java代码

    class Solution {
        public int largestRectangleArea(int[] heights) {
            int len = heights.length;
            if(len == 0) return 0;
            if(len == 1) return heights[0];
            int res = 0;
    
            int[] new_heights = new int[len + 2];
            new_heights[0] = 0;
            System.arraycopy(heights, 0, new_heights, 1, len);
            new_heights[len + 1] = 0;
            len += 2;
            heights = new_heights;
    
            Deque<Integer> stack = new ArrayDeque<>(len);
            stack.addLast(0);
    
            for(int i = 0;i < len;i++) {
                while(heights[i] < heights[stack.peekLast()]) {
                    int cur_height = heights[stack.pollLast()];
                    int cur_width = i - stack.peekLast() - 1;
                    res = Math.max(res, cur_height * cur_width);
                }
                stack.addLast(i);
            }
    
            return res;
        }
    }
    

    相关文章

      网友评论

        本文标题:柱状图中面积最大的矩形

        本文链接:https://www.haomeiwen.com/subject/aptxtktx.html