73.柱状图中最大矩形

47 阅读1分钟

题目链接

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

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

解法 单调栈

思路

上一题是维护一个单调递减的栈,而这里需要维护一个单调递增的栈,当遇到一个比栈顶更小的柱子,就意味着栈顶元素的右边第一个更小已经出现了,此时就可以栈顶柱子为“高”的最大矩形面积。

代码

function largestRectangleArea(heights: number[]): number {
    heights.push(0);
    let maxArea = 0;
    const stack = [];

    for (let i = 0; i < heights.length; i++) {
        while (stack.length && heights[i] < heights[stack[stack.length - 1]]) {
            const top = stack.pop()!;
            const height = heights[top];

            const width = stack.length === 0 ? i : i - stack[stack.length - 1] - 1;

            maxArea = Math.max(maxArea, height * width);
        }
        stack.push(i);
    }

    return maxArea;
};

时空复杂度

时间复杂度:O(n)

空间复杂度:O(n)