leetcode第84题柱状图中最大的矩形--单调栈

其实最开始是想写DP的也写出来了,但有一个测试用例全是1,真的恶心,然后就用单调栈

单调栈:如果当前值大于栈顶元素,出栈,直到栈顶元素均大于当前值,入栈。入栈坐标应该是多少?

如果在入栈时栈不空直接就用自己的坐标;

如果入栈时栈空就用刚出栈的栈顶指针坐标

class Solution(object):
  def largestRectangleArea(self, heights):
    """
    :type heights: List[int]
    :rtype: int
    就是需要用栈,用dp的话空间真的不够
    栈顶保存高度和进去时候的坐标(累计宽度)
    :stack[0]heights
    :stack[1]start_index
    """
    heights.append(0)
    ans=0
    stack_temp=[[heights[0],0]]
    for i in range(1,len(heights)):
      temp=[0,i]
      while stack_temp and stack_temp[-1][0]>heights[i]:
        temp=stack_temp.pop(-1)
        ans=max(ans,temp[0]*(i-temp[1]))
      if not stack_temp or stack_temp[-1][0]<heights[i]:
        stack_temp.append([heights[i],temp[1]])
    return ans

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值