Featured image of post 84. 柱状图中最大的矩形

84. 柱状图中最大的矩形

题目描述

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

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

示例 1:

  • 输入:heights = [2,1,5,6,2,3]
  • 输出:10
  • 解释:最大的矩形为图中红色区域,面积为 10

示例 2:

  • 输入: heights = [2,4]
  • 输出: 4

提示:

  • 1 <= heights.length <=105
  • 0 <= heights[i] <= 104

解法一:单调栈

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
func max(nums ...int) int {
    res := nums[0]
    for _, v := range nums {
        if v > res {
            res = v
        }
    }
    return res
}

func largestRectangleArea(heights []int) int {
    heights = append(heights, 0)
    n := len(heights)
    res := 0
    var stack []int
    stack = append(stack, -1)
    for i := 0; i < n; i++ {
        for stack[len(stack)-1] != -1 && heights[stack[len(stack)-1]] > heights[i] {
            h := heights[stack[len(stack)-1]]
            stack = stack[:len(stack)-1]

            left := stack[len(stack)-1]
            w := i - left - 1
            res = max(h*w, res)
        }
        stack = append(stack, i)
    }
    return res
}
Licensed under CC BY-NC-SA 4.0
最后更新于 2023/07/23 21:14:32
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计