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

!力扣 84. 柱状图中最大矩形

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

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

示例 1:

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

示例 2:

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

单调栈:

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        int ans=0; //矩形最大面积
        stack<int> st; //单调栈,假设栈开口向右,栈内元素从底到顶递增,存储heights的秩
        heights.push_back(-1); //哨兵节点,高度为-1

        for(int i=0;i<heights.size();i++){
            while(!st.empty() && heights[st.top()] > heights[i]){ //新元素的高小于栈顶元素的高
                int idx=st.top(); 
                st.pop(); //弹出栈顶元素idx,以idx为高的矩形右边界为此时的i,左边界为新的栈顶元素
                //另一端的哨兵节点,高度为-1
                int left = st.empty() ? -1 : st.top();
                ans=max(ans,heights[idx] * (i-left-1)); //尝试更新最大矩形面积

            }
            st.push(i);
        }
        return ans;

    }
};


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

相关文章:

  • 【Elasticsearch】硬件资源优化
  • TypeScript (TS) 和 JavaScript (JS)
  • 15 刚体变换模块(rigid.rs)
  • CommonJS 和 ES6module 的区别
  • c++可变参数详解
  • 修复使用unplugin-auto-import和unplugin-vue-components后tsc-vue报错的问题
  • Java JWT 技术详解与实践指南
  • 【RocketMQ】RocketMq之IndexFile深入研究
  • 机器学习day5
  • 【PDF提取局部内容改名】批量获取PDF局部文字内容改名 基于QT和百度云api的完整实现方案
  • 后盾人JS -- 原型
  • C语言教学第四课:控制结构
  • 内核定时器3-用户空间定时器
  • Docker Hub 镜像 Pull 失败的解决方案
  • AJAX笔记进阶篇
  • 《使用Ollama部署DeepSeek并进行对话全过程记录》
  • Spring 面试题【每日20道】【其二】
  • 11.1 LangChain Chains 最佳实践:从流水线设计到生产部署的全链路指南
  • 35.Word:公积金管理中心文员小谢【37】
  • string例题
  • MYSQL性能调优连接器、查询缓存、分析器、优化器、执行器、一图详解MYSQL底层工作原理
  • 泰山Office开源计划
  • 机试题——字符匹配
  • Python的那些事第十篇:隐藏细节与提供接口的艺术Python中的封装
  • Leetcode—598. 区间加法 II【简单】
  • golang命令大全7--性能优化与分析