題目描述:給定直方圖,每一小塊的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遍歷,如果此柱形高度大於或等於a[i];則height++;否則break;同理在i+1到N-1遍歷。最後矩形的面積爲a[i]*height;具體實現代碼如下:
#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;
}