代码随想录算法训练营第六十天| 84.柱状图中最大的矩形

柱状图中最大的矩形

题目链接: 力扣 

代码随想录算法训练营第六十天| 84.柱状图中最大的矩形_第1张图片

假设以柱子1(指值为1的柱子)为基准,柱子1的左侧没有比柱子1矮的元素,所以柱子1可以无限像左边扩展,柱子1的右侧也没有比柱子1矮的元素,所以柱子1可以无限向右边扩展,
所以柱子1的高度可以贯彻整个柱状图,即以柱子1为高度的面积为:1*6=6

以柱子5为基准,柱子5左侧没有比柱子5矮的柱子,说明柱子5左边不能进行扩展了,而柱子5右边第一个比柱子5小的柱子是柱子2,这说明柱子5能够扩展到柱子2(不包含柱子2)

以此,我们要求的就是一个柱子左边和右边第一个比其小的柱子。

所以这题和“接雨水”那道题是类似的,
只不过 接雨水 求得是一个柱子左边和右边第一个比其大的柱子。

所以此时的单调栈是一个单调递减的单调栈了。

当当前元素大于或等于栈顶元素时,将该元素投入单调栈中
当当前元素小于栈顶元素时,比较此时栈顶元素右边元素、栈顶元素、当前元素的大小关系。

class Solution {
public:
    int largestRectangleArea(vector& heights) {

        int result = 0;
        stack Mystack;
        heights.insert(heights.begin(),0);
        heights.push_back(0);
        Mystack.push(0);

        for(int i=1; i=  heights[Mystack.top()])
            {
                Mystack.push(i);
            }
            else if(!Mystack.empty() && heights[i]

 

你可能感兴趣的:(代码随想录刷题训练营,算法,leetcode,职场和发展)