柱状图中的最大矩形(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()
相关推荐
Minner-Scrapy12 分钟前
Scrapy 2.17 源码解析:Scheduler 调度器与磁盘/内存双队列
java·爬虫·python·scrapy·网络爬虫·twisted
CODER030422 分钟前
Anaconda和Mamba创建环境管理包常用命令合集
python·深度学习·conda·虚拟环境·mamba·常用命令大全
闲猫34 分钟前
LangGraph / Capabilities / Fault tolerance
python·agent·langgraph
IvanCodes1 小时前
Python 基础语法(一):变量、数据类型与运算符
python
程序员三藏2 小时前
浅谈性能测试
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·性能测试
l1258652 小时前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain
meilindehuzi_a3 小时前
Python 基础语法(1):常量、变量、类型、输入输出与运算符
开发语言·python
Zane19943 小时前
调用了 async 函数却没执行?一文讲透协程、event loop 与 await
后端·python
OPEN-F3 小时前
Python进阶教程:装饰器与生成器深入
开发语言·python
zhipujiaoyu3 小时前
2026年大数据专科何去何从?就业前景、发展趋势全揭秘!
大数据·python