classSolution: deflargestRectangleArea(self, heights: List[int]) -> int: n = len(heights) left = [-1] * n st = [] for i, h inenumerate(heights): while st and heights[st[-1]] >= h: st.pop() if st: left[i] = st[-1] st.append(i)
right = [n] * n st.clear() for i inrange(n - 1, -1, -1): h = heights[i] while st and heights[st[-1]] >= h: st.pop() if st: right[i] = st[-1] st.append(i)
ans = 0 for h, l, r inzip(heights, left, right): ans = max(ans, h * (r - l - 1)) return ans
classSolution: deflargestRectangleArea(self, heights: List[int]) -> int: n = len(heights) left = [-1] * n right = [n] * n st = [] for i, h inenumerate(heights): while st and heights[st[-1]] >= h: # 栈顶的柱子的右边最近的小宇等于它的就是 i 位置的柱子 right[st.pop()] = i if st: left[i] = st[-1] st.append(i)
ans = 0 for h, l, r inzip(heights, left, right): ans = max(ans, h * (r - l - 1)) return ans