柱形图最大矩形,直方图中的最大矩形
代码如下链接
暴力法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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。