首页 > 编程语言 >算法刷题 Day 60 | ● 84.柱状图中最大的矩形

算法刷题 Day 60 | ● 84.柱状图中最大的矩形

时间:2023-02-28 23:02:15浏览次数:46  
标签:矩形 int top heights 60 柱状图 st Day size

84.柱状图中最大的矩形

有了之前单调栈的铺垫,这道题目就不难了。

https://programmercarl.com/0084.%E6%9F%B1%E7%8A%B6%E5%9B%BE%E4%B8%AD%E6%9C%80%E5%A4%A7%E7%9A%84%E7%9F%A9%E5%BD%A2.html

Tips:这道题我用了自己想出来的解法,两遍单调栈,分别找到左边和右边比当前柱子矮的坐标,然后再for循环一遍计算出每个柱子所能延展出来的矩形面积即可。

我的题解:

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        // 两遍单调栈,分别找到左边和右边比当前柱子矮的坐标
        // 然后再for循环一遍计算出每个柱子所能延展出来的矩形面积即可
        stack<int> st;
        vector<int> leftMin(heights.size(),-1);
        vector<int> rightMin(heights.size(),heights.size());

        for(int i=0; i<heights.size(); i++){
            while(!st.empty() && heights[i] < heights[st.top()]){
                rightMin[st.top()] = i;
                st.pop();
            }

            if(st.empty() || heights[i] >= heights[st.top()]){
                st.push(i);
            }
        }

        stack<int>().swap(st);

        for(int i=heights.size()-1; i>=0; i--){
            while(!st.empty() && heights[i] < heights[st.top()]){
                leftMin[st.top()] = i;
                st.pop();
            }

            if(st.empty() || heights[i] >= heights[st.top()]){
                st.push(i);
            }
        }

        int result = 0;
        for(int i = 0; i<heights.size(); i++){
            int temp = heights[i] * (rightMin[i] - leftMin[i] - 1);
            result = max(result,temp);
        }
        return result;
    }
};

 

标签:矩形,int,top,heights,60,柱状图,st,Day,size
From: https://www.cnblogs.com/GavinGYM/p/17166410.html

相关文章

  • day45
    1、leetcode70爬楼梯需要n阶才能到达楼顶,每次可以爬1或2个台阶。转化为完全背包问题背包容量:n物品【物品可以反复使用】价值:1、2重量(所占背包容量):1......
  • 算法刷题 Day 59 | ● 503.下一个更大元素II ● 42. 接雨水
    503.下一个更大元素II这道题和739.每日温度几乎如出一辙,可以自己尝试做一做https://programmercarl.com/0503.%E4%B8%8B%E4%B8%80%E4%B8%AA%E6%9B%B4%E5%A4%A7%E5......
  • 路飞项目day03
    昨日回顾#1封装日志#咱们用的方案django--->原生日志--->配置文件copy过来--->写一个py文件,在py文件中拿到配置文件中定义的django日志对象,以后导入使用即可......
  • LeetCode 84. 柱状图中最大的矩形()
    原题解题目约束题解方法一classSolution{public:intlargestRectangleArea(vector<int>&heights){intn=heights.size();vec......
  • AD52060兼容替代TPA3110,AD52050兼容替代TPA3136
    AD52060是一款高效立体声D类功放,它的供电范围较宽(8V~26V),能方便地与各型电源板,包括LED液晶电源板、电源高压二合一板等相连接;输出功率较大,在供电为24V的状态下,输出功率可......
  • 代码随想录训练营day 3|59.螺旋矩阵II 加 数组总结篇
    59.螺旋矩阵II题目链接:59.螺旋矩阵II题目描述:给定一个正整数n,生成一个包含1到n^2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入:3输出:[[1,......
  • 刷刷刷 Day 39 | 63. 不同路径 II
    63.不同路径IILeetCode题目要求一个机器人位于一个 mxn 网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网......
  • HTML——day6
    上期我们说到了css的内部样式,指的是嵌套在HTML语句中的css语句,在学习HTML开始我们就说道要将结构和样式也就是HTML和css分开但是很显然内部嵌套这样的做法并没有实现真正意......
  • 路飞-day3——路飞前端全局css,全局配置文件、配置axios实现前后台交互、安装vue-cooki
    目录一、路飞前端全局css,全局配置文件1.1整理项目1.2设置全局css1.3配置全局js二、配置axios实现前后台交互三、安装vue-cookies四、安装elementui五、安装bootstrap和j......
  • 基于Opendaylight的SFC部署及实验
    ps使用命令行下载慢的化可以先下载到本地,之后手动安装安装双系统【Ubuntu安装详细教程】https://www.bilibili.com/video/BV1CG4y1h7bx/?share_source=copy_web&vd_s......