柱形图最大矩形,直方图中的最大矩形

  柱形图最大矩形,直方图中的最大矩形

  代码如下链接

  暴力法1:两重循环遍历时间复杂度O(N^3)class解决方案:

  def largestRectangleArea(self,heights: List[int]) - int:

  heightsLen=len(高度)

  最大面积=0

  # 此处我需要遍历数组中的全部值

  对于范围内的我(高地透镜):

  对于范围内的j(我,heightsLen):

  minHeight=math.inf

  对于范围(我,^ 1)中的k:

  minHeight=min(minHeight,高度[k])

  maxArea=max(maxArea,(j - i 1) * minHeight)

  返回最大面积

  暴力法2:一重循环时间复杂度O(N^2)class解决方案:

  def largestRectangleArea(self,heights: List[int]) - int:

  最大面积=0

  heightsLen=len(高度)

  对于范围内的我(高地透镜):

  左,右=我,我

  curHeight=heights[i]

  # 找出每一个矩形左右的边界(高度=当前矩形的高度)

  while left 0 and heights[left-1]=curHeight:

  左-=1

  而右高度Len - 1和heights[right 1]=curHeight:

  右=1

  maxArea=max(maxArea,curHeight *(右-左1))

  返回最大面积

  单调栈时间复杂度O(N)级解决方案:

  def largestRectangleArea(self,heights: List[int]) - int:

  最大面积=0

  # 初始栈中加入一个-1索引解决指数为0的元素的面积计算边界问题

  堆栈=[-1]

  # 数组非负最后添加一个元素0 可以将栈中所有的非0高度元素都计算面积

  # 若数组中包含0 则最终结束时栈内会剩下高度为0的下标面积肯定为0 无需处理

  身高。追加(0)

  对于范围内的我(长度(高度)):

  while heights[stack[-1]]heights[I]:

  hIndex=stack.pop()

  maxArea=max(maxArea,(I堆栈[-1] - 1) * heights[hIndex])

  堆栈。追加

  返回最大面积

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: