84. 柱状图中最大的矩形

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

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

84. 柱状图中最大的矩形_第1张图片
image

以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]

84. 柱状图中最大的矩形_第2张图片
image

图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。

示例:

输入: [2,1,5,6,2,3]
输出: 10

思路:

http://www.cnblogs.com/grandyang/p/4322653.html
用单调栈解决,遇到比当前高度更高的的加入栈,往后遍历。否则计算当前局部最高值最大矩形,具体做法是从栈中弹出局部最高,计算当前这块矩形,不往后遍历,重复以上过程。本质就是遍历到局部最大值时往前找最大的矩形。实现代码如下所示。

class Solution {
public:
    int largestRectangleArea(vector& heights) {
        int res=0;
        heights.push_back(0);
        stack st;
        for(int i=0;iheights[st.top()])
            {
                st.push(i);
            }
            else
            {
                int curr=st.top();
                st.pop();
                int area=heights[curr]*(st.empty()?i:(i-1-st.top()));
                res=max(res,area);
                i--;
            }
        }
        return res;
    }
};

你可能感兴趣的:(84. 柱状图中最大的矩形)