Skip to content

Latest commit

 

History

History
76 lines (51 loc) · 2.21 KB

0084-largest-rectangle-in-histogram.adoc

File metadata and controls

76 lines (51 loc) · 2.21 KB

84. 柱状图中最大的矩形

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

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

{image_attr}
{image_attr}

示例 1:

0084 03

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

示例 2:

0084 04

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

提示:

  • 1 <= heights.length <=105

  • 0 <= heights[i] <= 104

思路分析

{image_attr}

单调递增栈

当需要出栈的时候,就是当前元素小于栈顶元素。这样,弹出栈顶元素,以弹出的栈顶元素作为高,由于是单调递增栈,现在栈顶元素是小于已弹出的栈顶元素。所以,栈顶元素和当前坐标就是以弹出的栈顶元素的左右两个更低的柱子。那么,就弹出的栈顶元素作为高,当前坐标-栈顶元素(存的坐标)-1作为宽,就可以计算相关柱子组成的面积了。

哨兵技巧非常巧妙。即可减少栈的非空判断,又可以推进剩余元素的计算(如果没有最后的零点哨兵,栈里单调递增的元素最后还要单独处理。)

一刷
link:{sourcedir}/_0084_LargestRectangleInHistogram.java[role=include]