leetcode 84. 柱状图中最大的矩形

84. 柱状图中最大的矩形

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

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

示例 1:

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

示例 2:

复制代码
输入: heights = [2,4]
输出: 4
思路:

/*

单调递减栈

遍历到的数组元素大于或等于栈顶元素,压入栈

遍历到的数组元素小于栈顶元素,取出栈顶元素为middle,st.pop(),heights[i] = right; left = st.top();

h = height[middle];

w = i-st.top()-1;

遍历到的数组元素小于栈顶元素的判断是持续性的判断

result = max(h*w,result);

*/

代码:
cpp 复制代码
class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        /*
            单调递减栈
            遍历到的数组元素大于或等于栈顶元素,压入栈
            遍历到的数组元素小于栈顶元素,取出栈顶元素为middle,st.pop(),heights[i] = right; left = st.top();
            h = height[middle];
            w = i-st.top()-1;
            遍历到的数组元素小于栈顶元素的判断是持续性的判断
            result = max(h*w,result); 
        */
        int result = 0;
        stack<int>st;
        st.push(0);
        heights.insert(heights.begin(),0);
        heights.push_back(0);
        for(int i = 1;i<heights.size();i++)
        {
            if(heights[i]>heights[st.top()])
            {
                st.push(i);
            }
            else if(heights[i]==heights[st.top()])
            {
                st.push(i);
            }
            else{
                while(!st.empty()&&heights[i]<heights[st.top()])
                {
                    int middle = st.top();
                    st.pop();
                    if(!st.empty())
                    {int right = i;
                    int left = st.top();
                    int h = heights[middle];
                    int w = right-left-1;
                    result = max(result,h*w);
                    }
                }
            }
            st.push(i);
        }
        return result;
    }
};

还有很多瑕疵,还需继续坚持!

相关推荐
朝新_33 分钟前
【优选算法】第一弹——双指针(上)
算法
艾莉丝努力练剑1 小时前
【C++STL :stack && queue (一) 】STL:stack与queue全解析|深入使用(附高频算法题详解)
linux·开发语言·数据结构·c++·算法
胡萝卜3.01 小时前
深入理解string底层:手写高效字符串类
开发语言·c++·学习·学习笔记·string类·string模拟实现
kyle~1 小时前
计算机系统---CPU的进程与线程处理
linux·服务器·c语言·c++·操作系统·计算机系统
CoovallyAIHub1 小时前
ICLR 2026 惊现 SAM 3,匿名提交,实现“概念分割”,CV领域再迎颠覆性突破?
深度学习·算法·计算机视觉
IT古董1 小时前
【第五章:计算机视觉-计算机视觉在工业制造领域中的应用】1.工业缺陷分割-(2)BiseNet系列算法详解
算法·计算机视觉·制造
电鱼智能的电小鱼1 小时前
服装制造企业痛点解决方案:EFISH-SBC-RK3588 预测性维护方案
网络·人工智能·嵌入式硬件·算法·制造
只是懒得想了2 小时前
用C++实现一个高效可扩展的行为树(Behavior Tree)框架
java·开发语言·c++·design-patterns
bkspiderx2 小时前
C++设计模式之行为型模式:模板方法模式(Template Method)
c++·设计模式·模板方法模式
我是华为OD~HR~栗栗呀2 小时前
华为OD-23届考研-Java面经
java·c++·后端·python·华为od·华为·面试