柱状图中的最大矩形(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()
相关推荐
我是坏垠5 小时前
Crypto、Cipher与Password:Java加密开发的三个核心概念
java·开发语言·python
测试秃头怪6 小时前
如何评估自动化测试脚本的编写时间和维护工作量?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
姚青&7 小时前
测试左移体系
python·自动化
技术民工之路7 小时前
Python Socket编程零基础实战教程(TCP/UDP通信完整版)
python·tcp/ip·udp
EW Frontier7 小时前
三级跳突破864维动作空间——QMIX-Hierarchical多无人机协同通信方法全解析【附python代码】
开发语言·python·无人机·强化学习·通信资源分配
中微极客8 小时前
TensorFlow模型量化实战:从精度到延迟的优化指南
人工智能·python·tensorflow
仙人球部落10 小时前
-python-LangGraph框架(3-31-LangGraph 「合并式状态管理」的原理与实践)
开发语言·javascript·python
蜡笔削薪10 小时前
财联支付异地拓展商户的区域限制是否符合监管规定?
大数据·python
印度神油910 小时前
Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南
windows·python·ci/cd