代码随想录算法训练营Day60 | 单调栈(3/3) LeetCode 84.柱状图中最大的矩形

今天就是训练的最后一天了,刷满60天,感觉很有成就感!

84. Largest Rectangle in Histogram

Given an array of integers heights representing the histogram's bar height where the width of each bar is 1, return the area of the largest rectangle in the histogram.

用单调栈的思路来解这道题,本题是要找每个柱子左右两边第一个小于该柱子的柱子,所以从栈头(元素从栈头弹出)到栈底的顺序应该是从大到小的顺序。栈顶和栈顶的下一个元素以及要入栈的三个元素组成了我们要求最大面积的高度和宽度。

python 复制代码
class Solution:
    def largestRectangleArea(self, heights: List[int]) -> int:
        heights.insert(0, 0)
        heights.append(0)
        stack = [0]
        result = 0
        for i in range(1, len(heights)):
            while stack and heights[i] < heights[stack[-1]]:
                mid_height = heights[stack[-1]]
                stack.pop()
                if stack:
                    # area = width * height
                    area = (i - stack[-1] - 1) * mid_height
                    result = max(area, result)
            stack.append(i)
        return result
相关推荐
MicroTech20254 分钟前
微算法科技(NASDAQ: MLGO)使用量子傅里叶变换(QFT),增强图像压缩和滤波效率
科技·算法·量子计算
㓗冽9 分钟前
矩阵问题(二维数组)-基础题70th + 发牌(二维数组)-基础题71th + 数字金字塔(二维数组)-基础题72th
c++·算法·矩阵
芜湖xin18 分钟前
【题解-Acwing】796. 子矩阵的和
算法·前缀和
shehuiyuelaiyuehao19 分钟前
23七大排序算法
数据结构·算法·排序算法
Σίσυφος190021 分钟前
E=[T]×R 的证明
算法
TracyCoder12323 分钟前
LeetCode Hot100(49/100)——33. 搜索旋转排序数组
算法·leetcode
熬了夜的程序员31 分钟前
【LeetCode】116. 填充每个节点的下一个右侧节点指针
算法·leetcode·职场和发展
郝学胜-神的一滴31 分钟前
贝叶斯之美:从公式到朴素贝叶斯算法的实践之旅
人工智能·python·算法·机器学习·scikit-learn
静心观复32 分钟前
贝叶斯公式拆解
算法
智者很聪明33 分钟前
排序算法—冒泡排序
算法·排序算法