美文网首页
84. 柱状图中最大的矩形

84. 柱状图中最大的矩形

作者: 薄荷糖的味道_fb40 | 来源:发表于2019-04-26 19:30 被阅读0次

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

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

image

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

image

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

示例:

输入: [2,1,5,6,2,3]
输出: 10</pre>

思路:

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

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        int res=0;
        heights.push_back(0);
        stack<int> st;
        for(int i=0;i<heights.size();i++)
        {
            if(st.empty()||heights[i]>heights[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. 柱状图中最大的矩形

      本文链接:https://www.haomeiwen.com/subject/lznqnqtx.html