zoukankan      html  css  js  c++  java
  • 【每日一题-leetcode】84.柱状图中最大的矩形

    84.柱状图中最大的矩形

    1. 柱状图中最大的矩形

    难度困难509收藏分享切换为英文关注反馈

    给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

    求在该柱状图中,能够勾勒出来的矩形的最大面积。

    示例:

    输入: [2,1,5,6,2,3]
    输出: 10
    

    1.暴力破解

    思路

    两层遍历确定每一层最大的面积,第三层循环确定每次最底的高, j-i+1 长 * 高 求出每次的面积

    time:O(n^3)

    space:O(1)

     public int largestRectangleArea(int[] heights) {
            int maxArea = 0;
            for(int i=0;i<heights.length;i++){ //多少轮
                for(int j=i;j<heights.length;j++){ //多少次
                    int minHeigh = Integer.MAX_VALUE;
                    for(int k=i;k<=j;k++)//每一次中最小值
                        minHeigh = Math.min(minHeigh,heights[k]);
    
                    maxArea = Math.max(maxArea,minHeigh*(j-i+1));//每一次计算出最大值
                }
            }
            return maxArea;
        }
    

    2.优化暴力

    思路:每次利用之前的最低高

    time:O(n^2)

    space:O(1)

    public int largestRectangleArea(int[] heights) {
            int maxArea = 0;
            for(int i=0;i<heights.length;i++){ //多少轮
                int minHeigh = Integer.MAX_VALUE;
                for(int j=i;j<heights.length;j++){ //多少次
                    minHeigh = Math.min(minHeigh,heights[j]);
                    maxArea = Math.max(maxArea,minHeigh*(j-i+1));//每一次计算出最大值
                }
            }
            return maxArea;
        }
    

    3.栈

    time:O(n)

    space:O(n)

       public int largestRectangleArea(int[] heights) {
                Stack < Integer > stack = new Stack < > ();
                stack.push(-1);
                int maxarea = 0;
                for (int i = 0; i < heights.length; ++i) {
                    while (stack.peek() != -1 && heights[stack.peek()] >= heights[i])
                        maxarea = Math.max(maxarea, heights[stack.pop()] * (i - stack.peek() - 1));
                    stack.push(i);
                }
                while (stack.peek() != -1)
                    maxarea = Math.max(maxarea, heights[stack.pop()] * (heights.length - stack.peek() -1));
                return maxarea;
            }
    
  • 相关阅读:
    Codeforces 1149 B
    Tenka1 Programmer Contest 2019 D
    BZOJ 1001 [BeiJing2006]狼抓兔子
    Codeforces 741 D
    HDU 5306 Gorgeous Sequence
    HDU 6521 Party
    Codeforces 912A/B
    Educational Codeforces Round 35 B/C/D
    Codeforces 902D/901B
    Codeforces 902B
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860656.html
Copyright © 2011-2022 走看看