classSolution:deflargestRectangleArea(self, heights: List[int])->int:ifnot heights:return0
size =len(heights)
dp =[[0]*size for _ inrange(size)]
res = heights[0]for i inrange(size):for j inrange(i, size):if j == i:
dp[i][j]= heights[i]else:
dp[i][j]=min(dp[i][j-1], heights[j])
res =max(res, dp[i][j]*(j-i+1))return res
S2: O(n)
classSolution:deflargestRectangleArea(self, heights: List[int])->int:
ans, stk, heights =0,[(0,0)], heights +[0]for i, h inenumerate(heights):
ti, th, left =*stk[-1], i
while th > h:
ans =max(ans, th *(i - ti))# expands to the right
left, _ = stk.pop()# records the left most
ti, th = stk[-1]
stk.append((left, h))# expands to the leftreturn ans
[LeetCode Python3] 84. Largest Rectangle in Histogram+O(n^2)+O(n)
84. Largest Rectangle in HistogramS1: Time O(n^2)class Solution: def largestRectangleArea(self, heights: List[int]) -> int: if not heights: return 0 size = len(heights) dp = [[0]*size for _ in range(size)]