--- 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" companies: - { name: "Amazon", period: "Thirty Days", frequency: 39.1 } - { name: "Google", period: "Thirty Days", frequency: 29 } - { name: "Accenture", period: "Three Months", frequency: 88.6 } - { name: "tcs", period: "Three Months", frequency: 73.7 } - { name: "Microsoft", period: "Three Months", frequency: 42.1 } - { name: "Bloomberg", period: "Three Months", frequency: 36.8 } - { name: "Meta", period: "Three Months", frequency: 34.5 } 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 ```