1. 程式人生 > 其它 >【python高效解題】Leetcode-84:柱狀圖中最大的矩形

【python高效解題】Leetcode-84:柱狀圖中最大的矩形

技術標籤:演算法題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