代码随想训练营第六十天(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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?