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

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

🔗 https://leetcode.cn/problems/largest-rectangle-in-histogram

题目

  • 给一个数组 num 表示位置 i 上圆柱的高度,求圆柱可以勾勒出的矩形的最大面积

思路

  • 枚举圆柱 i,以该圆柱为高,计算其可以组成的矩形的最大面积。记录这过程中的最大值
  • 用单调栈记录,当前圆柱 i,左边第一个比当前圆柱低的下标 left
  • 用单调战记录,当前圆柱 i,右边第一个比当前圆柱低的下标 right
  • 当前圆柱组成的矩形的最大面积就是 heights[i] * (right - left - 1)

代码

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        stack<int> st;
        int n = heights.size();
        vector<int> left(n);
        vector<int> right(n);
        for (int i = 0; i < n; i++) {
            while (!st.empty() && heights[st.top()] >= heights[i]) {
                st.pop();
            }
            if (st.empty()) left[i] = -1;
            else left[i] = st.top();
            st.push(i);
        }

        st = stack<int>();

        for (int i = n - 1; i >= 0; i--) {
            while (!st.empty() && heights[st.top()] >= heights[i]) {
                st.pop();
            }
            if (st.empty()) right[i] = n;
            else right[i] = st.top();
            st.push(i);
        }

        int ans = 0;
        for (int i = 0; i < n; i++) {
            ans = max(ans, (right[i] - left[i] - 1) * heights[i]);
        }
        return ans;

        
    }
};

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

相关文章:

  • MySQL 存储函数:数据库的自定义函数
  • 使用MATLAB进行雷达数据采集可视化
  • MySQL 函数
  • MySQL数据库(二)- SQL
  • Ubuntu 手动安装 Open WebUI 完整指南
  • 【VM】VirtualBox安装CentOS8虚拟机
  • PaddleOCR 截图自动文字识别
  • JavaWeb入门-请求响应(Day3)
  • Kafka SASL/SCRAM介绍
  • 缓存的今生今世
  • python-leetcode-二叉树的右视图
  • 【算法】回溯算法专题② ——组合型回溯 + 剪枝 python
  • 31.Word:科技论文的译文审交稿【31】
  • Vue - Suspense的使用
  • AWS EMR使用Apache Kylin快速分析大数据
  • 第三篇:模型压缩与量化技术——DeepSeek如何在边缘侧突破“小而强”的算力困局
  • 《Origin画百图》之脊线图
  • 精品PPT | 企业大数据治理平台统一指标库建设方案
  • IM 即时通讯系统-51-MPush开源实时消息推送系统
  • 手写单层RNN网络,后续更新
  • K8S集群架构及主机准备
  • SQL索引优化_提高系统响应速度的秘诀
  • Deepseek R1 本地化部署指南:跨平台实战
  • react redux监测值的变化
  • 硕成C语言1笔记
  • Linux - 进程间通信(3)