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

【Hot 100】84. 柱状图中最大的矩形

目录

  • 引言
  • 柱状图中最大的矩形
    • 我的解题
    • 单调栈解法

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:算法专栏
  • 💥 标题:【Hot 100】84. 柱状图中最大的矩形
  • ❣️ 寄语:书到用时方恨少,事非经过不知难!

引言

柱状图中最大的矩形

  • 🎈 题目链接:
  • 🎈 做题状态:

我的解题

下面是直接暴力解法,时间复杂度是O(n^2)

class Solution {
public:int largestRectangleArea(vector<int>& heights) {// 以当前自己为最小值,然后往左右延伸,所能形成的矩形的面积,然后算出最大的。int maxArea = -1;for (int i = 0; i < heights.size(); ++i){int curArea;// 寻找左边界int left = i - 1;while (left >= 0 && heights[left] >= heights[i]){--left;}++left;// 寻找右边界int right = i + 1;while(right < heights.size() && heights[right] >= heights[i]){++right;}--right;// 计算面积maxArea = max(maxArea, (right - left + 1) * heights[i]);}return maxArea;}
};

单调栈解法

下面是官方的单调栈解法。

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int n = heights.size();vector<int> left(n), right(n);stack<int> mono_stack;for (int i = 0; i < n; ++i) {while (!mono_stack.empty() && heights[mono_stack.top()] >= heights[i]) {mono_stack.pop();}left[i] = (mono_stack.empty() ? -1 : mono_stack.top());mono_stack.push(i);}mono_stack = stack<int>();for (int i = n - 1; i >= 0; --i) {while (!mono_stack.empty() && heights[mono_stack.top()] >= heights[i]) {mono_stack.pop();}right[i] = (mono_stack.empty() ? n : mono_stack.top());mono_stack.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.xdnf.cn/news/12572.html

相关文章:

  • 数据库管理与高可用-MySQL高可用
  • 编程基础:执行流
  • Profinet转CanOpen网关模块:铝业车间通信“破壁者”,引领工业新变革
  • MS2691 全频段、多模导航、射频低噪声放大器芯片,应用于导航仪 双频测量仪
  • win32相关(IAT HOOK)
  • 【RTSP从零实践】1、根据RTSP协议实现一个RTSP服务
  • STM32什么是寄存器
  • 24、std::hash
  • conda环境配置(一) —— 常用虚拟环境操作命令
  • 新时代AI发展,更好的做自己
  • 第1讲、包管理和环境管理工具Conda 全面介绍
  • VB.net复制Ntag213卡写入UID
  • [C++] list双向链表使用方法
  • 深入理解 Java 多线程:原理剖析与实战指南
  • 乐观锁与悲观锁的实现和应用
  • 统一点云数据格式:高效转换与属性保留
  • 微服务架构的性能优化:链路追踪与可观测性建设
  • 基于Python学习《Head First设计模式》第六章 命令模式
  • PHP 表单 - 验证邮件和URL
  • Java+Access综合测评系统源码分享:含论文、开题报告、任务书全套资料
  • 物联网智慧医院建设方案(PPT)
  • JMeter-SSE响应数据自动化2.0
  • # STM32F103 SD卡读写程序
  • JDK21深度解密 Day 15:JDK21实战最佳实践总结
  • Go语言堆内存管理
  • 如何在 Java 中优雅地使用 Redisson 实现分布式锁
  • ArcPy扩展模块的使用
  • 深入解析HarmonyOS5 UIAbility组件:从核心架构到实战应用
  • Clickhouse统计指定表中各字段的空值、空字符串或零值比例
  • uniapp- UTS 插件鸿蒙端开发示例 虽然我们这个示例简单 但是这个是难住很多人的一大步