当前位置: 面试刷题>> 直方图中最大矩形面积 (经典算法题500道)
### 题目描述补充
给定一个非负整数数组 `heights`,代表直方图中每个条形的宽度为 1 的情况下的高度。你需要在直方图中找到能形成的矩形的最大面积。矩形的边必须平行于坐标轴,且每条边必须与直方图中的一个或多个条形接触。
### 示例
**输入**: heights = [2,1,5,6,2,3]
**输出**: 10
**解释**: 在这个例子中,最大的矩形面积是在高度为 5 的条形上,宽度为 2(即条形 2 和 3)。
### PHP 示例代码
```php
function largestRectangleArea($heights) {
$stack = [];
$maxArea = 0;
$heights[] = 0; // 添加一个哨兵,方便处理边界
$n = count($heights);
for ($i = 0; $i < $n; $i++) {
while (!empty($stack) && $heights[$stack[count($stack) - 1]] >= $heights[$i]) {
$h = $heights[array_pop($stack)];
$w = empty($stack) ? $i : $i - $stack[count($stack) - 1] - 1;
$maxArea = max($maxArea, $h * $w);
}
$stack[] = $i;
}
return $maxArea;
}
// 示例用法
$heights = [2, 1, 5, 6, 2, 3];
echo largestRectangleArea($heights); // 输出 10
```
### Python 示例代码
```python
def largestRectangleArea(heights):
stack = []
max_area = 0
heights.append(0) # 哨兵
for i, h in enumerate(heights):
while stack and heights[stack[-1]] >= h:
height = heights[stack.pop()]
width = i if not stack else i - stack[-1] - 1
max_area = max(max_area, height * width)
stack.append(i)
return max_area
# 示例用法
heights = [2, 1, 5, 6, 2, 3]
print(largestRectangleArea(heights)) # 输出 10
```
### JavaScript 示例代码
```javascript
function largestRectangleArea(heights) {
let stack = [];
let maxArea = 0;
heights.push(0); // 哨兵
for (let i = 0; i < heights.length; i++) {
while (stack.length > 0 && heights[stack[stack.length - 1]] >= heights[i]) {
let h = heights[stack.pop()];
let w = stack.length === 0 ? i : i - stack[stack.length - 1] - 1;
maxArea = Math.max(maxArea, h * w);
}
stack.push(i);
}
return maxArea;
}
// 示例用法
let heights = [2, 1, 5, 6, 2, 3];
console.log(largestRectangleArea(heights)); // 输出 10
```
### 码小课
码小课网站中有更多关于算法和数据结构的学习内容,包括各类经典算法问题的详细解析和代码实现,帮助大家更好地理解和掌握算法知识。欢迎大家访问码小课网站,一起学习和进步!