代码随想录算法训练营第六十天|84.柱状图中最大的矩形


一、84.柱状图中最大的矩形

  1. 和上一个思路差不多,这里需要扩容
  2. 注意高度是中间的高度。
    public int largestRectangleArea(int[] heights) {
        LinkedList<Integer> stack = new LinkedList<>();
        //数组扩容
        int[] newHeights = new int[heights.length+2];
        newHeights[0] = 0;
        newHeights[heights.length+1]=0;
        for(int i =1;i<newHeights.length-1;i++){
            newHeights[i] = heights[i-1];
        }
        heights = newHeights;
        stack.add(0);
        int area = 0;
        for(int i=1;i<heights.length;i++){
            if(heights[i]>=heights[stack.peekLast()]){
                stack.add(i);
            } else{
                while(!stack.isEmpty()&& heights[i]<heights[stack.peekLast()]){
                    int mid = stack.removeLast();
                    int left = stack.peekLast();
                    int right = i;
                    int w = right-left-1;
                    int h = heights[mid];//?
                    area = Math.max(area,w*h);
                }
                stack.add(i);
            }
        }
        return area;
    }

11分钟

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值