尋找直方圖中面積最大的矩形 --- 龐果網


又來了,今天做了好幾道了。。還是龐果網的


題目詳情

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


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



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



   請完成函數largestRectangleArea,實現尋找直方圖中面積最大的矩形的功能,如當給定直方圖各小塊的高度= [2,1,5,6,2,3] ,返回10。


算法描述

這題沒什麼算法,從第一個索引開始,記爲i,另外一個索引從i開始向右移動,記爲j,找出在 [ i .. j] 範圍內最低的高度,記爲H,那麼面積等於 H*(j-i+1)

遍歷完以後找出最大的面積即可。不知道爲什麼答題時長180分鐘,我害怕還有貓膩,先用小號試了一下然後用大號提交的。。哈哈。。


我看到include的頭文件有stack,估計更優的算法使用了棧吧。

代碼如下

int shortest(vector<int> arr,int start,int end)
{
    int shortest=arr[start];
    int index=start;
    int i;
    if(start==end)
    {
        return index; 
    }
        
    
    for(i=start;i<=end;i++)
    {   
        if(shortest>=arr[i])
        {
            shortest=arr[i];
            index=i;
        }
    }
    
    return index;
    
}

int largestRectangleArea(vector<int> &height) {
    //wirte your code hero
    int area=0;
    int max=0;
    int height_index=0;
    for(int i=0;i<height.size();i++)
    {

        for(int j=i;j<height.size();j++)
        {

            height_index=shortest(height,i,j);
            area=(j-i+1)*(height[height_index]);
            if(max < area)
                max=area;

        }
    }
    
    return max;
}



發佈了54 篇原創文章 · 獲贊 16 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章