LeetCode第84题--柱状图的最大矩形

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

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

LeetCode第84题--柱状图的最大矩形_第1张图片
以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。
LeetCode第84题--柱状图的最大矩形_第2张图片
图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。

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

class Solution {
public:
    int largestRectangleArea(vector& heights) {
        stack sta;
        vector heightsCp;
        heightsCp.assign(heights.begin(), heights.end());
        heightsCp.push_back(-1);
        int maxRes = -1;
        for(int i = 0; i < heightsCp.size(); i++)
        {
            while(!sta.empty() && heightsCp[i] < heightsCp[sta.top()])
            {
                int height = heightsCp[sta.top()];
                sta.pop();
                int weight = (sta.empty() ? i : i-sta.top()-1);
                maxRes = max(maxRes, height*weight);
            }
            sta.push(i);
        }
        return maxRes;    
    }
};

使用单调栈矩阵索引,找到矩阵的高度和左右边沿
右边沿:右边第一个矮于当前栈顶元素A的柱子
左边沿:单调栈中紧临栈顶A的柱子,如果A已出栈,左边沿就是A出栈后的栈顶,若A出栈后栈为空,说明A出栈后左边沿没有比它矮的,左边沿可以到栈顶0

具体思路可参考该帖:https://blog.csdn.net/Zolewit/article/details/88863970

你可能感兴趣的:(LeetCode,算法编程学习)