Largest Rectangle in Histogram

这是一道智力题,我还会再次好好做这个的

一个很好的参考:点击打开链接


/**
     * @param height: A list of integer
     * @return: The area of largest rectangle in the histogram
     */
     
    public int largestRectangleArea(int[] height) {
        int max = 0;
        if (height == null || height.length < 1) {
            return max;
        }
        Stack<Integer> stack = new Stack<>();
        int i = 0;
        int[] newHeight = new int[height.length + 1];
        for (int j = 0; j< height.length; j++) {
            newHeight[j] = height[j];
        }
        newHeight[height.length] = 0;
        while (i < newHeight.length) {
            // if (i == height.length) {
            //     int t = stack.pop();
            //     max = Math.max(max, height[t] * (stack.isEmpty() ? i : i - stack.peek() - 1));
            //     break;
            // }
            
            if (stack.isEmpty() || newHeight[stack.peek()] < newHeight[i]) {
                stack.push(i);
                i++;
            } else {
                int t = stack.pop();
                max = Math.max(max, newHeight[t] * (stack.isEmpty() ? i : i - stack.peek() - 1));
            }
        }
        
        
        return max;
    }
     
    // public int largestRectangleArea(int[] height) {
    //     int max = 0;
    //     //2 if (height == null || height.length < 2) {
    //     if (height == null || height.length < 1) {
    //         return max;
    //     }
    //     for (int i = 0; i < height.length; i++) {
    //         int h = height[i];
    //         for (int j = i; j < height.length; j++) {
    //             //1 if (height[i] > height[j]) {
    //             if (h > height[j]) {
    //                 h = height[j];
    //             }
    //             int width = j - i + 1;
    //             max = Math.max(max, width*h);
    //         }
    //     }
    //     return max;
    // }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值