問題來源
84. 柱狀圖中最大的矩形
給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度爲 1 。
求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。
以上是柱狀圖的示例,其中每個柱子的寬度爲 1,給定的高度爲 [2,1,5,6,2,3]。
圖中陰影部分爲所能勾勒出的最大矩形面積,其面積爲 10 個單位。
示例:
輸入: [2,1,5,6,2,3]
輸出: 10
大佬解析
代碼
"""
需求:
給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度爲 1 。求柱狀圖中最大的矩形
思想:
1.暴力破解(二重循環,遍歷以每根柱子爲高的最大矩形面積,取最大者)
2.單調棧
"""
class Solution:
def largestRectangleArea(self, heights) -> int:
max_area = 0
heights = [0] + heights + [0]
stack = [0]
for i in range(1, len(heights)):
while heights[i] < heights[stack[-1]]:
height = heights[stack.pop()]
width = i - stack[-1] - 1
max_area = max(max_area, height * width)
stack.append(i)
return max_area
def largestRectangleArea1(self, heights) -> int:
size = len(heights)
res = 0
for i in range(size):
min_height = heights[i]
for j in range(i, size):
min_height = min(min_height, heights[j])
res = max(res, (j - i + 1) * min_height)
return res