当前位置: 面试刷题>> 直方图中最大矩形面积 (经典算法题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 ``` ### 码小课 码小课网站中有更多关于算法和数据结构的学习内容,包括各类经典算法问题的详细解析和代码实现,帮助大家更好地理解和掌握算法知识。欢迎大家访问码小课网站,一起学习和进步!
推荐面试题