leetcode热题100.柱状图中最大的矩形

Problem: 84. 柱状图中最大的矩形

文章目录

题目

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

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

示例 1:
在这里插入图片描述

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

示例 2:
在这里插入图片描述

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

思路

对于一根柱子x,其高为h.假如我们知道了他左边的第一根小于他的柱子的位置l和邮编第一个小于的高度的柱子r,那么我们很容易求得他的最大面积为: s = ( r − l − 1 ) ∗ h s = (r-l-1) * h s=(rl1)h

根据这一性质,我们采用单调栈的方法,在栈中保留第一个比当前元素小的元素的索引,所有大于当前元素的索引都将被弹出;如果栈不为空,说明存在这样一个索引,其对应的元素值小于当前元素,我们记录他。

我们分别从左往右和从右往左计算两遍,最后得出答案

复杂度

时间复杂度:

O ( n ) O(n) O(n)

空间复杂度:

O ( n ) O(n) O(n)

Code

class Solution:
    def largestRectangleArea(self, heights: List[int]) -> int:
        n = len(heights)
        left = [-1] * n
        st = []
        for i,x in enumerate(heights):
            while st and heights[st[-1]] >= x:
                st.pop()
            if st:
                left[i] = st[-1]
            st.append(i)

        right = [n] * n
        st.clear()
        for i in range(n-1,-1,-1):
            x = heights[i]
            while st and heights[st[-1]] >= x:
                st.pop()
            if st:
                right[i] = st[-1]

            st.append(i)
        
        ans = 0
        for h,l,r in zip(heights,left,right):
            ans = max(ans,h*(r-l-1))
        return ans

相关推荐

  1. LeetCode100】【栈】矩形

    2024-03-29 11:58:01       29 阅读
  2. LeetCode 84. 矩形

    2024-03-29 11:58:01       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 11:58:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 11:58:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 11:58:01       87 阅读
  4. Python语言-面向对象

    2024-03-29 11:58:01       96 阅读

热门阅读

  1. 数字孪生之数据

    2024-03-29 11:58:01       40 阅读
  2. 亚远景科技-浅谈ASPICE标准和ASPICE认证/评估

    2024-03-29 11:58:01       48 阅读
  3. 图片文件格式的文件头标识

    2024-03-29 11:58:01       46 阅读
  4. 【PyTorch Tensor】PyTorch Tensor编程教学:基础与实战

    2024-03-29 11:58:01       48 阅读
  5. python爬虫-bs4

    2024-03-29 11:58:01       39 阅读
  6. 面试题解析:bind,call,apply的区别(2)

    2024-03-29 11:58:01       41 阅读