> For the complete documentation index, see [llms.txt](https://www.vjssn.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.vjssn.dev/practice/24-06-28/lc084-largest-rectangle-in-histogram.md).

# LC084 - Largest Rectangle in Histogram

## Problem

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

**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.

## Solution

Calculate width of potential rectangle for each bar by subtracting starting index from current index. Pop elements from stack to calculate area of formable rectangles when current height is less than height at top of stack.

Time and space complexity is $$O(n)$$.

```python
def largestRectangleArea(self, heights: List[int]) -> int:
	maxArea = 0
	stack = []
	
	for index, height in enumerate(heights):
		begin = index
	
		while begin and stack[-1][1] > height:
			i, h = stack.pop()
			maxArea = max(maxArea, (index-i) * h)
			begin = i
		stack.append((begin, height))
	
	for tup in stack:
		index, height = tup[0], tup[1]
		maxArea = max(maxArea, (len(heights)-index)*height)
	
	return maxArea

```
