当前位置: 首页 > article >正文

leetcode热题100(84. 柱状图中最大的矩形)c++

链接:84. 柱状图中最大的矩形 - 力扣(LeetCode)

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

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

示例 1:

输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10

示例 2:

输入: heights = [2,4]
输出: 4

提示:

  • 1 <= heights.length <=105
  • 0 <= heights[i] <= 104

思路

        我们求最大的一个矩形面积,那么如果在柱子连续递增的情况,此时最短的柱子的右长度一定是单调递增的个数了,左边的长度肯定是就是上个单调递增的值的下标到现在坐标的长度了,所以我们只需要设置一个单调栈来记录单调递增的数组的位置,要是遇到比栈顶元素小就计算,枚举一下最大值即可

代码

class Solution {
public:
    int largestRectangleArea(vector<int>& a) {
        a.push_back(0); //避免没计算,最后一个元素设置为0
        int n = a.size();
        a.insert(a.begin(),0);  //避免前面元素位置为0,不好计算
        stack<int> st; 
        int res = 0;
        for(int i=0;i<=n;i++){
            while(st.size()>1 && a[i]<a[st.top()]){ //遇到比栈顶小元素
                int cur = a[st.top()];  //当前柱子的大小
                st.pop();   //弹出
                int l = st.top();   //上个栈顶的柱子大小
                int r = i;  //遇到更小的元素的位置
                int len = r-l-1;    //长度
                //cout<<len<<" "<<cur<<endl;
                res = max(cur*len,res);
            }
            st.push(i);
        }

        return res;
    }
};


http://www.kler.cn/a/470387.html

相关文章:

  • C#—Task异步的常用方法及TaskFactory工厂类详解
  • Mysql--基础篇--函数(字符串函数,日期函数,数值函数,聚合函数,自定义函数及与存储过程的区别等)
  • [Linux]Mysql9.0.1服务端脱机安装配置教程(redhat)
  • Python递归(汉诺塔问题)
  • OpenCV轮廓相关操作API (C++)
  • 谷粒商城-高级篇-Sentinel-分布式系统的流量防卫兵
  • 如何利用Java爬虫按关键字搜索淘宝商品案例指南
  • 机器学习基础-支持向量机SVM
  • 玉米识别数据集,4880张图,正确识别率可达98.6%,支持yolo,coco json,pasical voc xml格式的标注,可识别玉米
  • 工控安全需求分析与安全保护工程
  • java学习 单例模式
  • 11-Gin 中的 Cookie --[Gin 框架入门精讲与实战案例]
  • vue.js 自定义指令-基础语法
  • 大数据安全需求分析与安全保护工程
  • 【PyTorch入门】 PyTorch不同优化器的比较
  • Netty中用了哪些设计模式?
  • 云计算安全需求分析与安全防护工程
  • windows下,golang+vscode+delve 远程调试
  • 安卓漏洞学习(十八):Android加固基本原理
  • PHP零基础入门笔记
  • Vue的后端之一,Django
  • 【大数据】(选修)实验4 安装熟悉HBase数据库并实践
  • 2台ubuntu之间scp
  • QPainter,QPen,QBrush详解
  • Ruby语言的数据结构
  • 微信小程序中调用阿里云 OSS(Object Storage Service)上传文件