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
posted @ 2020-10-19 15:08  老鼠司令  阅读(48)  评论(0)    收藏  举报