柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。
图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。
示例:
输入: [2,1,5,6,2,3]
输出: 10
思路+代码+注释:
public int largestRectangleArea(int[] heights) {
/*
思路:每次遇到局部峰值(该值大于等于后一个值)的时候,计算该柱形和前面所有柱形组成矩形的情况,比较保留最大值。
*/
int maxArea=0;
for (int i = 0; i < heights.length; i++) {
if (i+1<heights.length && heights[i]<heights[i+1])
{
continue;
}
int midH=heights[i];
if (maxArea<midH)
{
maxArea=midH;
}
for (int j = i-1; j >-1 ; j--) {
int wid=i-j+1;
if (midH>heights[j])
{
midH=heights[j];
}
int area=wid*midH;
if (area>maxArea)
{
maxArea=area;
}
}
}
return maxArea;
}