diff --git a/work/1/Hard/Array/84.largest-rectangle-in-histogram.py b/work/1/Hard/Array/84.largest-rectangle-in-histogram.py index b86525b..e4f6678 100644 --- a/work/1/Hard/Array/84.largest-rectangle-in-histogram.py +++ b/work/1/Hard/Array/84.largest-rectangle-in-histogram.py @@ -9,7 +9,7 @@ Given an array of integers heights representing the histogram's bar height where the width of each bar is 1, return the area of the largest rectangle in the histogram. - + Example 1: @@ -24,15 +24,31 @@ Example 2: Input: heights = [2,4] Output: 4 - + Constraints: - • 1 <= heights.length <= 10^5 + • 1 <= heights.length <= 10^5 - • 0 <= heights[i] <= 10^4 + • 0 <= heights[i] <= 10^4 """ + class Solution: def largestRectangleArea(self, heights: list[int]) -> int: - + maxArea = 0 + stack = [] + + for i, h in enumerate(heights): + start = i + while stack and stack[-1][1] > h: + index, height = stack.pop() + width = i - index + maxArea = max(maxArea, height * width) + start = index + stack.append((start, h)) + + for i, h in stack: + maxArea = max(maxArea, h * (len(heights) - i)) + + return maxArea