首页 > 其他 > 详细

直方图最大矩形面积

时间:2021-08-30 14:16:18      阅读:14      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 思路:

遍历数组

用栈存储一个递增的数组下标,当出现小于最大值时,一次弹出栈,以弹出值高度乘以当前遍历数组位置的i的距离,判断最大值与否

class Solution {
    public int largestRectangleArea(int[] heights) {
        int maxare = 0;
        Deque<Integer> sta = new LinkedList<>();
        sta.addLast(-1);
        for(int i = 0;i < heights.length; i++){
            while(sta.peekLast() != -1 && heights[sta.peekLast()] > heights[i]){
                // int index = sta.pollLast();
                int height = heights[sta.pollLast()];
                maxare = Math.max(maxare,height*(i-sta.peekLast()-1));
            }
            sta.addLast(i);
        }

        while(sta.peekLast() != -1){
            int height = heights[sta.pollLast()];
            maxare = Math.max(maxare,height * (heights.length - sta.peekLast()-1));
        }
        return maxare;
    }
}

我一开始时出现的问题,最终结果没有以最小高乘以当前数组总个数

看题解后,在栈顶先压入一个-1,最后遍历栈中剩余递增数时,数组总长度减栈顶的-1再+1得到的是数组总个数,因为前面已经规划出栈中是一个递增值,所以最后一个元素一定是最小值。

直方图最大矩形面积

原文:https://www.cnblogs.com/Dkfeng/p/15196758.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!