您的位置:首页 > 其它

寻找直方图中面积最大的矩形 --- 庞果网

2013-07-24 19:27 387 查看
又来了,今天做了好几道了。。还是庞果网的

题目详情

给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形。

如下图所示,直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]:







那么上述直方图中,面积最大的矩形便是下图所示的阴影部分的面积,面积= 10单位。







请完成函数largestRectangleArea,实现寻找直方图中面积最大的矩形的功能,如当给定直方图各小块的高度= [2,1,5,6,2,3] ,返回10。

算法描述

这题没什么算法,从第一个索引开始,记为i,另外一个索引从i开始向右移动,记为j,找出在 [ i .. j] 范围内最低的高度,记为H,那么面积等于 H*(j-i+1)

遍历完以后找出最大的面积即可。不知道为什么答题时长180分钟,我害怕还有猫腻,先用小号试了一下然后用大号提交的。。哈哈。。

我看到include的头文件有stack,估计更优的算法使用了栈吧。

代码如下

int shortest(vector<int> arr,int start,int end)
{
int shortest=arr[start];
int index=start;
int i;
if(start==end)
{
return index;
}

for(i=start;i<=end;i++)
{
if(shortest>=arr[i])
{
shortest=arr[i];
index=i;
}
}

return index;

}

int largestRectangleArea(vector<int> &height) {
//wirte your code hero
int area=0;
int max=0;
int height_index=0;
for(int i=0;i<height.size();i++)
{

for(int j=i;j<height.size();j++)
{

height_index=shortest(height,i,j);
area=(j-i+1)*(height[height_index]);
if(max < area)
max=area;

}
}

return max;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: