栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode-084-栈-单调栈

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode-084-栈-单调栈

1 题目

剑指 Offer II 039. 直方图最大矩形面积

2 解答
class Solution {
public:
    int largestRectangleArea(vector& heights) {
        //单调递增栈
        stack s;//s中保存的是直方图的索引
        s.push(-1);//-1相当于一个sentinel
        int maxArea = 0;
        for (int i = 0; i < heights.size(); ++i) 
        {
            //若当前柱高<=栈顶柱高,将栈顶柱子出栈,并计算栈顶柱子为顶的最高矩阵面积,直至可入栈
            //出栈的目的是在“栈顶->栈底”的方向上找到第一个“高度小于当前柱子的高度”元素,这样,被找到的这个元素和当前元素之间(不含这两个边界元素)夹着的矩形可勾勒出最大面积的矩形
            while (s.top() != -1 && heights[s.top()] >= heights[i]) 
            {
                int height = heights[s.top()];
                s.pop();
                int width = i - s.top() - 1;
                maxArea = max(maxArea, height * width);
            }
            //若当前柱高>栈顶柱高,那么该柱子下标入栈
            s.push(i);
        }
        //[1,2,3,4,5]如果按照这个顺序入栈,在上面的过程中是没有机会进行入栈的操作,所以这里还要进行计算一次
        while (s.top() != -1) 
        {
            int height = heights[s.top()];
            s.pop();
            int width = heights.size() - s.top() - 1;
            maxArea = max(maxArea, height * width);
        }
        return maxArea;        
    }
};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/692232.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号