代码随想训练营第六十天(Python)| 84. 柱状图中最大的矩形

84. 柱状图中最大的矩形
1、双指针

class Solution:
    def largestRectangleArea(self, heights: List[int]) -> int:
        n = len(heights)
        # 左右第一个小于 i 的下标
        min_l, min_r = [0] * n, [0] * n

        res = 0

        min_l[0] = -1
        for i in range(1, n):
            temp = i-1
            while temp >= 0 and heights[temp] >= heights[i]:
                temp = min_l[temp]
            min_l[i] = temp

        min_r[n-1] = n
        for i in range(n-2, -1, -1):
            tmp = i + 1
            while tmp < n and heights[tmp] >= heights[i]:
                tmp = min_r[tmp]
            min_r[i] = tmp

        for i in range(n):
            area = heights[i] * (min_r[i] - min_l[i] - 1)
            res = max(area, res)

        return res

2、单调栈

        # 找到左右第一个小于下标为 i 的
        heights.insert(0, 0)
        heights.append(0)
        n = len(heights)
        stack = []
        res = 0
        for i in range(n):
            while stack and heights[i] < heights[stack[-1]]:
                mid_h = heights[stack.pop()]
                if stack:
                    area = (i - stack[-1] - 1) * mid_h
                    res = max(area, res)
            stack.append(i)
        return res
posted @   忆象峰飞  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示