6.29 - hard - 19

84. Largest Rectangle in Histogram

這道題用stack記錄遞增序列,計算以某個點為高度的矩形,就要用這個點的高度乘以最右和最左的邊界, 因為是遞增序列,那么它的最左0或者stack[-1],最右就是當它被pop出去時候的index-1

這題稍微tricky的地方在于在heights的右邊界都加上一個值,這樣保證最后一個值可以被訪問到,然后stack永遠不為空

class Solution(object):
   def largestRectangleArea(self, heights):
       """
       :type heights: List[int]
       :rtype: int
       """
       if not heights:
           return 0
       if len(heights) == 1:
           return heights[0]
       stack = [-1]
       heights = heights + [0]
       max_area = 0
       for i in range(len(heights)):
           while heights[i] < heights[stack[-1]]:
               cur = heights[stack.pop()]
               max_area = max(max_area, cur*(i - stack[-1] - 1))
           stack.append(i)
       
       return max_area
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容