• LeetCode——柱状图中最大的矩形


    Q:给出n个数字,代表直方图的条高,直方图每一条的宽度为1,请计算直方图中最大矩形的面积

    上图是每条宽度为1, 高度 =[2,1,5,6,2,3].的直方图

    图中的阴影部分是该直方图中面积最大的矩形,面积为10个单位
    例如:
    给出的高度 =[2,1,5,6,2,3],
    返回10.

    A:遍历数组以当前值为高构建最大长方形。
    用堆栈计算每一块板能延伸到的左右边界
    对每一块板

    • 堆栈顶矮,这一块左边界确定,入栈
    • 堆栈顶高,堆栈顶右边界确定,出栈,计算面积
    • 入栈时左边界确定
    • 出栈时右边界确定
    • 堆栈里元素是递增的(内部保持升序)

    本质:中间的短板没有用!
    复杂度 O(n)

    public int largestRectangleArea(int[] height) {
            int n = height.length;
            int result = 0;
            Stack<Integer> s = new Stack<>();
            for (int i = 0; i < n; i++) {
                while (!s.empty() && height[s.peek()] >= height[i]) {
                    int index = s.pop();
                    int h = height[index];
                    int k = i - 1 - (s.empty() ? (-1) : s.peek());
                    result = Math.max(result, k * h);
                }
                s.push(i);
            }
            while (!s.empty()) {
                int index = s.pop();
                int h = height[index];
                int k = n - 1 - (s.empty() ? (-1) : s.peek());
                result = Math.max(result, k * h);
            }
            return result;
        }
    
  • 相关阅读:
    Sum Root to Leaf Numbers 解答
    459. Repeated Substring Pattern
    71. Simplify Path
    89. Gray Code
    73. Set Matrix Zeroes
    297. Serialize and Deserialize Binary Tree
    449. Serialize and Deserialize BST
    451. Sort Characters By Frequency
    165. Compare Version Numbers
    447. Number of Boomerangs
  • 原文地址:https://www.cnblogs.com/xym4869/p/12636512.html
Copyright © 2020-2023  润新知