代码随想录算法训练营第六十天| 84 柱状图中最大的矩形

找每个柱子左右两边第一个小于该柱子的柱子,栈头到栈底的顺序应该从大到小

求解矩形面积需要分别得到该柱左边和右边高度小于本柱的柱子

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        int res = 0;
        stack<int>st;
        heights.insert(heights.begin(),0);
        heights.push_back(0);
        st.push(0);
        for(int i = 1;i < heights.size();i++){
            if(heights[i] >= heights[st.top()]){
                st.push(i);
            }else{//此时新柱子的高度小于栈顶柱子,作为栈顶柱子右边的柱子
                while(!st.empty() && heights[i] < heights[st.top()]){//确保单调栈从大到小
                    int mid = st.top();
                    st.pop();
                    int l = st.top();//由单调递减栈的性质可知栈中存放的其他柱子的高度都比栈顶柱子底,此柱子可以作为原栈顶柱子左边的柱子
                    int r = i;
                    int w = r - l - 1;//计算出宽度
                    int h = heights[mid];//新柱子的高度
                    res = max(res,h * w);
                }
                st.push(i);
            }
        }
        return res;
    }
};

时间复杂度O(n)

空间复杂度O(n) 

最近更新

  1. TCP协议是安全的吗?

    2023-12-23 00:46:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-23 00:46:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-23 00:46:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-23 00:46:06       20 阅读

热门阅读

  1. Linux环境下通过journal命令查看和管理日志

    2023-12-23 00:46:06       40 阅读
  2. 基于粒子群算法的抽水蓄能电站优化调度研究

    2023-12-23 00:46:06       38 阅读
  3. C语言—每日选择题—Day61

    2023-12-23 00:46:06       33 阅读
  4. docker资源限制

    2023-12-23 00:46:06       42 阅读
  5. vue3.0 通用管理页面封装

    2023-12-23 00:46:06       38 阅读
  6. 若依前端引入外部icon

    2023-12-23 00:46:06       48 阅读
  7. 标签正则化和硬标签、软标签、单标签、多标签

    2023-12-23 00:46:06       43 阅读
  8. go语言读取Excel表格中的数据

    2023-12-23 00:46:06       39 阅读