LeetCode #84 Largest Rectangle in Histogram
题目
Largest Rectangle in Histogram
解题方法
想要求得最大矩形的面积,就要找到所有可能的最大矩形,即针对每一个位置的矩形,在它左右两端寻找能够拼接到一起的面积。进而可以推断出,只要在一个位置的左右两端分别找到第一个小于它高度的位置,用右端的坐标减去左端的坐标再减1,就能得到这个矩形的底边长度,再乘以这个位置的高度,就是当前位置的矩形经过左右两边的扩展后的最大面积。根据题意,求出所有这样的矩形的面积的最大值返回即可。
代码
class Solution:
def largestRectangleArea(self, heights: List[int]) -> int:
if not heights:
return 0
lessFromLeft = []
lessFromRight = []
for i in range(len(heights)):
lessFromLeft.append(-1)
lessFromRight.append(len(heights))
for i in range(1, len(heights)):
p = i - 1
while p >= 0 and heights[p] >= heights[i]:
p = lessFromLeft[p]
lessFromLeft[i] = p
for i in range(len(heights)-2, -1, -1):
p = i + 1
while p < len(heights) and heights[p] >= heights[i]:
p = lessFromRight[p]
lessFromRight[i] = p
maxArea = 0
for i in range(len(heights)):
maxArea = max(maxArea, heights[i] * (lessFromRight[i] - lessFromLeft[i] - 1))
return maxArea

浙公网安备 33010602011771号