# 84. Largest Rectangle in Histogram

#### Hard

***

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

&#x20;

**Example 1:**

![](https://assets.leetcode.com/uploads/2021/01/04/histogram.jpg)

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

![](https://assets.leetcode.com/uploads/2021/01/04/histogram-1.jpg)

```
Input: heights = [2,4]
Output: 4
```

&#x20;

**Constraints:**

* `1 <= heights.length <= 105`
* `0 <= heights[i] <= 104`

```python
class Solution:
    def largestRectangleArea(self, heights: List[int]) -> int:
        heights.append(0) # This 0 helps in cases like [1,2,3,4,5]
        stack = [-1]
        result = 0
        for index in range(len(heights)):
            # If Current Height Less Than Top Height of Stack
            while heights[index] < heights[stack[-1]]:
                h = heights[stack.pop()]
                # print('Height', h)
                w = index -1 - stack[-1]
                result = max(result, h*w)
            stack.append(index)
        return resultpy
```
