代码随想录算法训练营Day 60 || 84.柱状图中最大的矩形

84.柱状图中最大的矩形

力扣题目链接(opens new window)

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

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

  • 1 <= heights.length <=10^5
  • 0 <= heights[i] <= 10^4

  1. 初始化栈和最大面积变量:

    • 创建一个空栈 stack 来存储柱子的索引。
    • 初始化一个变量 max_area 用于存储遍历过程中计算出的最大面积。
  2. 处理每个柱子:

    • 遍历每个柱子的高度 heights,同时在 heights 的末尾添加一个高度为 0 的柱子,以确保栈中的所有柱子都能被处理。
    • 对于每个柱子 i
      • 当栈不为空且当前柱子的高度 heights[i] 小于栈顶柱子的高度时,执行以下操作:
        • 弹出栈顶元素,该元素索引记为 top。这意味着以 heights[top] 为高的矩形的右边界已经确定。
        • 计算矩形的宽度:
          • 如果栈为空,宽度即为当前柱子的索引 i(因为左边界是起始位置)。
          • 如果栈不为空,宽度为 i - stack[-1] - 1(当前索引减去新的栈顶元素索引,减去1表示两个柱子间的距离)。
        • 计算矩形面积:heights[top] * 宽度,并更新 max_area
      • 将当前柱子索引 i 压入栈中。
  3. 返回最大面积:

    • 经过上述遍历,我们已经计算出了每个可能的矩形的面积,并记录了其中的最大值。
    • 返回 max_area 作为结果。

 

class Solution:
    def largestRectangleArea(self, heights):
        stack = []
        max_area = 0
        heights.append(0)  # 添加一个高度为0的柱子,确保所有柱子都被弹出

        for i, h in enumerate(heights):
            while stack and heights[stack[-1]] > h:
                height = heights[stack.pop()]
                width = i if not stack else i - stack[-1] - 1
                max_area = max(max_area, height * width)
            stack.append(i)

        return max_area


# solution = Solution()
# example_heights = [2, 1, 5, 6, 2, 3]
# result = solution.largestRectangleArea(example_heights)
# print(result)

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 01:40:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 01:40:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 01:40:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 01:40:05       20 阅读

热门阅读

  1. 绘制爆炸轨迹 III:绘制条形轨迹 Python

    2023-12-08 01:40:05       31 阅读
  2. 快速去除Word文档密码,全面解决你的困扰

    2023-12-08 01:40:05       37 阅读
  3. 介绍chatgpt原理及技术架构

    2023-12-08 01:40:05       41 阅读
  4. MySQL学习day04(一)

    2023-12-08 01:40:05       33 阅读
  5. qt反射基础

    2023-12-08 01:40:05       32 阅读
  6. android 13.0 framework禁用系统所有通知

    2023-12-08 01:40:05       38 阅读
  7. Linux下超轻量级Rust开发环境搭建:一、安装Rust

    2023-12-08 01:40:05       38 阅读
  8. python pandas dataframe常用数据处理总结

    2023-12-08 01:40:05       37 阅读
  9. 纯C读取文件实现解析H264裸流每一帧数据

    2023-12-08 01:40:05       46 阅读
  10. Redisson

    2023-12-08 01:40:05       43 阅读
  11. 算法 拓扑序列

    2023-12-08 01:40:05       29 阅读
  12. Redis默认序列化方式乱码原因及解决办法

    2023-12-08 01:40:05       43 阅读
  13. 计算机网络——传输层

    2023-12-08 01:40:05       39 阅读
  14. python模块 — json

    2023-12-08 01:40:05       43 阅读