题目
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]
。
图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10
个单位。
示例:
输入: [2,1,5,6,2,3]
输出: 10
思路一
这里先介绍暴力解法,后续优化版将基于暴力解法为基础,先依次遍历每个木块,对于木块 i
,我们分别向前向后查找高度小于木块 i
,得到下标 left, right
,然后计算 (right-left-1)*heights[i]
就能计算以木块 i
为“中心”的最大矩形面积,再取循环中的最大值即为答案;
代码一
class Solution {
public int largestRectangleArea(int[] heights) {
int len = heights.length, ans = 0;
for (int i=0; i<len; i++){
int left = i, right =