Largest Rectangle in Histogram

//这道题属于栈的题目,需要判断入栈元素和栈内元素大小,构造一个非递减栈

//最巧妙的地方在于,扩大原数组容量,使得最后一个数据为0,以此来排除栈内剩余元素

//注意数组为空,数组为1的情况

class Solution {

    public int largestRectangleArea(int[] heights) {


        Stack<Integer> stack =new Stack<Integer>();
        int []height=new int[heights.length+1];
        for(int i=0;i<heights.length;i++)
            height[i]=heights[i];
        height[heights.length]=0;
        int res=0;
        if(heights.length==0)
            return 0;
        if(heights.length==1)
            return heights[0];
        for(int i=0;i<height.length;i++){
            
            if(stack.isEmpty()||height[stack.peek()]<=height[i])
            {
                
              stack.push(i);
                
            }
            else{

                int count =stack.pop();

                  //i-stack.peek()-1中1是要把i自身的数据排除,不算在前一个之列

                res=Math.max(res,height[count]*(stack.empty()?i:(i-stack.peek()-1)));
                --i;
            }
        }
    
       
    return res; 
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值