1. 程式人生 > >尋找直方圖中面積最大的矩形

尋找直方圖中面積最大的矩形

給定直方圖,每一小塊的height由N個非負整數所確定,每一小塊的width都為1,請找出直方圖中面積最大的矩形。

   如下圖所示,直方圖中每一塊的寬度都是1,每一塊給定的高度分別是[2,1,5,6,2,3]:

   那麼上述直方圖中,面積最大的矩形便是下圖所示的陰影部分的面積,面積= 10單位。

這道題簡單,有點類似木桶原理,即最矮的那塊矩形決定最終的面積。方法是依次處理每個矩形塊,計算該矩形塊之前面積最大的矩形,在這個過程中要知道當前矩形前最矮的矩形塊。

#include <iostream>

using namespace std;

int largestRectangleArea(const int *height,int n)
{
    int maxarea=0;
    int minh=0;
    int sum=0;
    for(int i=0;i<n;i++)
    {
        minh=height[i];
        sum=0;
        for(int j=i;j>=0;j--)
        {
            if(height[j]<minh) minh=height[j];
            sum=minh*(i-j+1);
            if(sum>maxarea)
                maxarea=sum;
        }
    }
    return maxarea;
}
int main()
{
    int a[6]={2,1,5,6,2,3};
    cout<<largestRectangleArea(a,6)<<endl;
    return 0;
}