• 【每日一题-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;
            }
    
  • 相关阅读:
    你自己不优秀,就算认识再多优秀人又有何用
    史玉柱和他老同学的一段故事
    哪有雪中送碳,都是锦上添花
    围城之困
    心已死,梦前行
    一位销售高手逼单经历!
    Python--函数return多个值
    Python--内置函数
    Python--小程序
    Python--递归
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860656.html
Copyright © 2020-2023  润新知