柱状图中的最大矩形(python)

思路:单调递增栈,遍历数组,入栈索引。

首先设置两个高度为0的柱子作为哨兵,前后各设置一个。使用一个单调递增栈,当栈不为空,且当前元素大于栈顶元素时,入栈。若当前元素小于栈顶元素时,说明找到了第一个比栈顶元素矮的元素,弹出一个栈顶元素,此时的栈顶元素就是左边界L,此时遍历到的元素就是右边界R,先前被弹出的元素就是高度H=heightsi,则此时矩阵面积为Area=H*(L-R-1)

复制代码
#柱状图中的最大矩形
import sys
from typing import List

def largestRectangleArea(h:List[int])->str:
    maxArea=0
    stack=[]
    for i in range(len(h)):
        while stack and h[i]<h[stack[-1]]:  #当前元素大于小于栈顶元素
            tmp=stack.pop()  #出栈
            a=h[tmp]  #柱子高度
            b=i-stack[-1]-1   #柱子宽度,i是右边界,stack[-1]是左边界
            maxArea=max(maxArea,a*b)
        stack.append(i)
    return maxArea
                   
def main():
    line=sys.stdin.readline().strip()
    if not line:
        return 0
    heights=list(map(int,line.split()))  #转换成数组
    h=[0]+heights+[0]   #前后拼接两个高度为0的柱子
    res=largestRectangleArea(h)
    print(res)
    return


if __name__=="__main__":
    main()
相关推荐
逻极12 分钟前
FastAPI 实战:从入门到自动化文档,如何把API开发效率提升200%
python·api·fastapi·swagger·异步
半兽先生43 分钟前
大模型技术开发与应用——5.大模型Agent开发(CrewAI)
大数据·人工智能·python·机器学习·ai
眼泪划过的星空1 小时前
快速了解LangGraph:构建智能Agent工作流的核心框架
人工智能·python·langchain
IsSh9nj6q2 小时前
Python全栈应用搭建神器magic-dash .新版本介绍
开发语言·python·dash
Cachel wood2 小时前
hands-on-modern-rl:动手学强化学习策略梯度reinforce
开发语言·python
蓝斯4972 小时前
一碰即传,重构跨设备文件分享体验
开发语言·python·重构
寒水馨2 小时前
macOS下载、安装uv-0.12.0(附安装包uv-aarch64-apple-darwin.tar.gz)
python·macos·rust·项目管理·包管理器·astral·pip替代
码云骑士3 小时前
85-Prompt是一门工程-结构化分层-System-vs-User-Prompt
python·prompt
qq_22589174663 小时前
基于Python的中药药材数据可视化分析系统
python·机器学习·数据分析·django