您的位置:首页 > 编程语言 > C语言/C++

寻找直方图中面积最大的矩形(C语言版)

2013-12-20 11:21 288 查看
注:我是用循环实现的,肯定不是最优的算法,欢迎留言讨论。(题目来自庞果网)


题目详情:

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

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



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



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


解题代码:

int minElement(const int *h, int b, int e)
{
int min = h[b++];
for (; b < e; ++b)
{
if (h[b] < min)
min = h[b];
}
return min;
}

int largestRectangleArea(const int *height,int n) {
int max = 0;
int min = 0;
int i, j;
for (i = 0; i < n; ++i)
{
for (j = i; j < n; ++j)
{
min = minElement(height, i, j + 1);
if ((j+1-i)*min > max)
{
max = (j+1-i)*min;
}
}
}
return max;
}


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