--- title: '84. Largest Rectangle in Histogram' description: 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 icon: dot topics: - { name: "Array", slug: "array" } - { name: "Stack", slug: "stack" } - { name: "Monotonic Stack", slug: "monotonic-stack" } - { name: "Range Minimum/Maximum Query", slug: "range-minimum-maximum-query" } issue: "https://github.com/prdlk/leetcode/issues/76" sidebar: label: 'Largest Rectangle in Histogram' badge: 'Hard' --- ### Example 1: - Input: `heights = [2,1,5,6,2,3]` - Output: `10` - Explanation: The above is a histogram where width of each bar is `1`. The largest rectangle is shown in the red area, which has an area = `10` units. ### Example 2: - Input: `heights = [2,4]` - Output: `4` ### Constraints: - `1 <= heights.length <= 10^5` - `0 <= heights[i] <= 10^4` ## Solution ```py 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 ```