美文网首页
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