CSDN編程挑戰之尋找直方圖中面積最大的矩形

    題目描述:給定直方圖,每一小塊的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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章