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

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

首先设置两个高度为0的柱子作为哨兵,前后各设置一个。使用一个单调递增栈,当栈不为空,且当前元素大于栈顶元素时,入栈。若当前元素小于栈顶元素时,说明找到了第一个比栈顶元素矮的元素,弹出一个栈顶元素,此时的栈顶元素就是左边界L,此时遍历到的元素就是右边界R,先前被弹出的元素就是高度H=heights[i],则此时矩阵面积为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()
相关推荐
结衣结衣.20 小时前
走进机器学习:新手必看的完整入门指南
人工智能·python·学习·机器学习
绘梨衣54721 小时前
某公开数据简单逆向
python·beautifulsoup
小江的记录本21 小时前
【Java并发编程】锁机制:volatile:JMM内存模型、可见性/禁止指令重排、内存屏障、单例模式中的应用(附《思维导图》+《面试高频考点清单》)
java·后端·python·mysql·单例模式·面试·职场和发展
csdn小瓯21 小时前
前端工程化:React + TypeScript + Tailwind CSS 的组件化实践
开发语言·人工智能·python
hef28821 小时前
R包grafify:简单操作实现高效统计绘图
开发语言·python·r语言
这是谁的博客?21 小时前
Python 异步编程核心原理与实践深度解析
java·网络·python·协程·asyncio·异步编程
战南诚21 小时前
力扣 之 198.打家劫舍
python·算法·leetcode
晚烛21 小时前
CANN 模型预热:消除首次推理延迟
开发语言·python
Fanxt_Ja1 天前
Langchain+Tavily对接大模型实现联网搜索
python·langchain·deepseek·tavily
一个心烑1 天前
【layui页面编辑下拉框处理的三种方式】
linux·python·layui