LeetCode84.柱状图中最大矩形

cpp 复制代码
class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        int size = heights.size();
        int n = heights.size();
        vector<int> left(size, -1);
        stack<int> st;
        st.push(0);
        //找到每个柱子左侧小于它高度的最近元素的下标
        for(int i = 1; i < size; i++){
            while(!st.empty() && heights[st.top()] >= heights[i])
                st.pop();
            if(!st.empty())
                left[i] = st.top();
            st.push(i);
        }
        vector<int> right(size, n);
        stack<int> st2;
        st2.push(n - 1);
        //找到每个柱子左侧小于它高度的最近元素的下标
        for(int i = n - 2; i >= 0; i--){
            while(!st2.empty() && heights[st2.top()] >= heights[i])
                st2.pop();
            if(!st2.empty())
                right[i] = st2.top();
            st2.push(i);
        }
        int res = 0;
        for(int i = 0; i < size; i++){
            res = max(res, heights[i] * (right[i] - left[i] - 1));
        }
        return res;
    }
};
相关推荐
chao1898443 分钟前
MATLAB与HFSS联合仿真
算法
fei_sun6 分钟前
【总结】【OS】成组链接法
jvm·数据结构
月明长歌9 分钟前
【码道初阶】牛客TSINGK110:二叉树遍历(较难)如何根据“扩展先序遍历”构建二叉树?
java·数据结构·算法
jqrbcts12 分钟前
关于发那科机器人视觉补偿报警设置
人工智能·算法
_Li.15 分钟前
机器学习-线性判别函数
人工智能·算法·机器学习
蒲小英15 分钟前
算法-栈与队列
算法
代码游侠34 分钟前
学习笔记——IPC(进程间通信)
linux·运维·网络·笔记·学习·算法
保持低旋律节奏42 分钟前
数据结构——链表自实现
数据结构·链表
Nick_zcy1 小时前
基于Vue和Python的羽毛球拍智能推荐系统, 从“不会选羽毛球拍”到“选对拍”的一站式小工具
前端·vue.js·python·算法·推荐算法
风筝在晴天搁浅1 小时前
hot100 438.找到字符串中所有字母异位词
算法