【python高效解題】Leetcode-84:柱狀圖中最大的矩形
阿新 • • 發佈:2021-01-20
技術標籤:演算法題pythonleetcode演算法資料結構面試
我們的宗旨是:使用最簡潔的程式碼,完成AC:)
題目介紹
**題目難度:**hard
**題目型別:**array | stack
給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。
求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。
以上是柱狀圖的示例,其中每個柱子的寬度為 1,給定的高度為 [2,1,5,6,2,3]。
圖中陰影部分為所能勾勒出的最大矩形面積,其面積為 10 個單位。
示例:
輸入: [2,1,5,6,2,3]
輸出: 10
題目分析
該題是一道典型的單調棧問題,在高度遍歷的基礎上,採用單調棧,降低一個緯度的時間複雜度。雖然標註是hard,但是是一道筆試常見題,直接看程式碼吧:)
python程式碼
class Solution:
def largestRectangleArea(self, heights: List[int]) -> int:
stack = [-1]
heights.append(0)
ans = 0
for i in range(len(heights)):
while heights[i] < heights[stack[-1]]:
h = heights[stack.pop()]
w = i - stack[-1] - 1
ans = max(anx, h * w)
stack.append(i)
return ans