---
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
```
