Largest Rectangle in Histogram
原题链接Largest Rectangle in Histogram
给定一个直方图,计算这个直方图中最大的矩形面积。输入的是直方图中每个柱的高度
首先可以想到要求面积就需要确定矩形的高度,但是每个柱子的高度是不一样的,而不同的柱子组成的矩形要以最短的那个作为高
那么,是否可以对每个高度的分别计算面积呢?简单的说就是以每个柱子的高度作为最后矩形的高度,计算形成的最大矩形的面积
隐含的方法就是对于每个柱子,它的高度记为H,需要
- 向左找第一个高度小于H的柱子位置,下标记为l
- 向右找第一个高度小于H的柱子位置,下标记为r
那么,以H作为高的矩形的宽为(r - l - 1),面积为(r - l - 1) * H
只需要把所有这样的面积求出来取最大值即可
代码如下
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
int maxArea = 0;
for(int i = 0; i < heights.size(); ++i)
{
/* 向左找第一个小于当前高度的位置 */
int l = i - 1;
while(l >= 0 && heights[l] >= heights[i])
--l;
/* 向右找第一个小于当前高度的位置 */