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

CSDN编程挑战之寻找直方图中面积最大的矩形

2014-01-23 09:57 363 查看
题目描述:给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形。如下图所示,直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]: 那么上述直方图中,面积最大的矩形便是下图所示的阴影部分的面积,面积=10单位。请完成函数largestRectangleArea,实现寻找直方图中面积最大的矩形的功能,如当给定直方图各小块的高度=
[2,1,5,6,2,3] ,返回10。


解题思路:传递一数组a[]、长度;数组中存储各个柱形的高度。我们从0-N开始遍历,例如当前下标是i,初始化最大矩形的宽度height为1;从i-1到0遍历,[b]如果此柱形高度大于或等于a[i];则height++;否则break;同理在i+1到N-1遍历。最后矩形的面积为a[i]*height;具体实现代码如下:[/b]



#include<stdio.h>

int largestRectangleArea(int a[],int n)
{
int height=0;
int width;
int max=0;
for(int i=0;i<n;i++)
{
width=1;
height=a[i];
for(int j=i-1;j>=0;j--)
{
if(a[j]>=height)
width++;
else
break;
}
for(int k=i+1;k<n;k++)
{
if(a[k]>=height)
width++;
else
break;
}
if(height*width>max)
max=height*width;
}
return max;
}
int main()
{
int a[6]={2,1,5,6,2,3};
printf("%d",largestRectangleArea(a,6));
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: