essay

hot100-柱状图中最大的矩形

#算法

hot100——柱状图中最大的矩形

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

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

示例 1:

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

示例 2:

image.png
输入: heights = [2,4]
输出: 4

提示:

1 <= heights.length <=10510^5

0 <= heights[i] <= 10410^4

解法

func largestRectangleArea(heights []int) int {
    res := 0
    heights = append(heights, 0)  // 在末尾添加高度为0的柱子,确保所有柱子都能被处理
    stack := []int{-1}   // 栈中存放柱子的索引,初始放入 -1 作为左边界哨兵
    for i := 0; i < len(heights); i++ {
        for len(stack) > 1 && heights[i] < heights[stack[len(stack)-1]] {
            top := stack[len(stack)-1]
            stack = stack[:len(stack)-1]
            // 长度 = heights[top]
            // 宽度 = 右边界 - 左边界 - 1
            res = max(res, heights[top] * (i-stack[len(stack)-1]-1))  
        }
        stack = append(stack, i)
    }
    return res
}
 
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接