Python 中直方图中的最大矩形

pythonserver side programmingprogramming

假设我们有一个整数数组,表示直方图的高度。每个条形都有单位宽度。我们必须找到面积最大的矩形,如下所示 −

为了解决这个问题,我们将遵循以下步骤 −

  • 创建堆栈,设置 i := 0,ans := 0

  • while i <高度的大小,然后

    • 如果堆栈有 0 个元素或堆栈顶部元素的高度 <= height[i],则

      • 将 i 插入堆栈,将 i 增加 1

    • 否则 −

      • x := 堆栈顶部元素,从堆栈中删除。

      • height := heights[x]

      • 当堆栈不为空时,temp := height * (i * stack[-1] – 1),否则 temp := height * i

      • ans := ans 和 temp 的最大值

  • 当堆栈不为空时−

    • x := 堆栈顶部元素

    • height := height[x],从堆栈中删除

    • temp := height * length of heights – 堆栈顶部元素 – 堆栈不为空时为 1,否则 temp := length of heights

    • ans := ans 和 temp 的最大值

  • 返回 ans

示例

让我们看下面的实现,以便更好地理解 −

class Solution(object):
   def largestRectangleArea(self, heights):
      stack = []
      i = 0
      ans = 0
      while i < len(heights):
         if len(stack) == 0 or heights[stack[-1]]<=heights[i]:
            stack.append(i)
            i+=1
         else:
            x = stack[-1]
            stack.pop()
            height = heights[x]
            temp = height * (i-stack[-1]-1) if len(stack)!= 0 else height * i
            ans = max(ans,temp)
      while len(stack)>0:
         x = stack[-1]
         height = heights[x]
         stack.pop()
         temp = height * (len(heights)-stack[-1]-1) if len(stack)!= 0 else height* len(heights)
         ans = max(ans,temp)
      return ans
ob = Solution()
print(ob.largestRectangleArea([2,1,5,7,3,2]))

输入

[2,1,5,7,3,2]

输出

12

相关文章