码迷,mamicode.com
首页 > 其他好文 > 详细

84. Largest Rectangle in Histogram

时间:2018-09-24 22:17:40      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:height   ram   for   正整数   根据   mat   处理   return   时间   

一、题目

  1、审题

 技术分享图片

  2、分析

    给一个正整数数组代表高度,且宽度为1,求该数组形成的矩形所能存储的最大容量。

 

二、解答

  1、思路:

    方法一:

      列举出数组形成的矩形,即可找到最大容量。

      即宽度为 1 、2、3......n 的矩形, 其中高度为连续的 i 个整数中最小的一个。

      注意(使用 3 层循环,时间超出)

public int largestRectangleArea(int[] heights) {
    
        int len = heights.length;
        if(len == 0)
            return 0;
        int max = 0;
        for (int i = 1; i <= len; i++) {    // 几个数之和
            for (int j = 0; j <= len - i; j++) {    // 计算连续 i 个数之和
                if(i == 1) {
                    max = Math.max(max, heights[j]);
                }
                else {
                    int min = heights[j];
                    for (int k = j; k < j+i; k++) {
                        if(heights[k] < min)
                            min = heights[k];
                    }
                    max = Math.max(max, min * i);
                }
            }
            
        }
        
        return max;
    }

  

  方法二、使用一个栈进行记录。

      根据元素的升序将数组分成 n 份,栈中每次处理 1 份,且处理时若第 i+1 份的最小值大于第 i 份的某个值,则该值是继续保持在栈中的。

      栈的特征为:

        ①、栈中存放的下标的元素是升序的

        ②、每个 index 均入栈

        ③、栈为空,则表示下标 i 的前边的元素值均比下标 i 的元素大

        ④、 i - 1 - stack.peek() 表示的是以该元素值为高时,所形成的矩阵的最大宽度。

public int largestRectangleArea3(int[] heights) {
        
        int len = heights.length;
        Stack<Integer> stack = new Stack<>();
        int maxArea = 0;
        for (int i = 0; i <= len; i++) {
            
            int cur = (i == len ? -1 : heights[i]);
            while(!stack.isEmpty() && heights[stack.peek()] >= cur) {
                int h = heights[stack.pop()];
                int w = stack.isEmpty() ? i : i - 1 - stack.peek();
                maxArea = Math.max(maxArea, h*w);
            }
            
            stack.push(i);
        }
        
        return maxArea;
    }
    

 

84. Largest Rectangle in Histogram

标签:height   ram   for   正整数   根据   mat   处理   return   时间   

原文地址:https://www.cnblogs.com/skillking/p/9696854.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!