leetcode(34)-柱狀圖中的最大矩陣
阿新 • • 發佈:2020-09-16
給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。
求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。
https://leetcode-cn.com/problems/largest-rectangle-in-histogram/
自己的方法是優化一半的方法,使用單調棧更好
class Solution: def largestRectangleArea(self, heights) -> int: ln = len(heights) heights = heights[::-1] begins_l = [i for i in range(ln)] begins_r = [i for i in range(ln)] if ln ==0: return 0 max_area = max(heights) for i,height in enumerate(heights): if height*ln<=max_area: continue if i > 0 and heights[i-1]>=height: begin_l = begins_l[i-1] begin_r = begins_r[i-1] else: begin_l = i begin_r = i while begin_l>0: if height<=heights[begin_l-1]: begin_l-=1 else: break begins_l[i] = begin_l if (ln-begin_l)*height<=max_area: continue while begin_r<ln-1: if height<=heights[begin_r+1]: begin_r+=1 else: break begins_r[i] = begin_r #print(begin_r,begin_l,max_area) max_area = max(max_area, (begin_r-begin_l+1)*height) return max_area