题目描述:
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]
。
图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10
个单位。
示例:
输入: [2,1,5,6,2,3] 输出: 10
思路:
采用二分的思路,首先计算 面积m=总长度*所有柱状图高度最小值。然后将整个柱状图分为两部分,高度为1的柱体的左边部分和高度为1的右边部分。再分别对每部分计算 面积m。直到数组的长度为0。定义一个函数countArea(low,high)接收两个参数,当前数组的左、右序号,再递归求值。
JavaScript:
/**
* @param {number[]} heights
* @return {number}
*/
var largestRectangleArea = function(heights) {
var maxArea=0;
function countArea(low,high)
{
if((high-low)<0)
{
return;
}
var min=heights[low];
var index=low;
for(var i=low+1;i<=high;i++)
{
if(min>heights[i])
{
min=heights[i];
index=i;
}
}
var area=(high-low+1)*min;
if(area>maxArea)
maxArea=area;
countArea(low,index-1);
countArea(index+1,high);
}
countArea(0,heights.length-1);
return maxArea;
};