mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 21:22:43 +00:00
52 lines
1.5 KiB
Plaintext
52 lines
1.5 KiB
Plaintext
---
|
|
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
|
|
```
|