Lintcode122 Largest Rectangle In Histogram solutio

【題目描述】

Givennnon-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.
Lintcode122 Largest Rectangle In Histogram solutio

Above is a histogram where width of each bar is 1, given height =[2,1,5,6,2,3].

Lintcode122 Largest Rectangle In Histogram solutio

The largest rectangle is shown in the shaded area, which has area =10unit.

給定n個非負整數表示直方圖的條形高度,每個條的寬度爲1,找到直方圖中最大矩形的面積。

以上是一個直方圖,每個欄的寬度爲1,高度= [ 2,1,5,6,2,3 ]。

最大矩形顯示在陰影區域,面積爲10單位。

【題目鏈接】

www.lintcode.com/en/problem/largest-rectangle-in-histogram/

【題目解析】

這道題目算是比較難得一道題目了,首先最簡單的做法就是對於任意一個bar,向左向右遍歷,直到高度小於該bar,這時候計算該區域的矩形區域面積。對於每一個bar,我們都做如上處理,最後就可以得到最大值了。當然這種做法是O(n2),鐵定過不了大數據集合測試的。

從上面我們直到,對於任意一個bar n,我們得到的包含該bar n的矩形區域裏面bar n是最小的。我們使用ln和rn來表示bar n向左以及向右第一個小於bar n的bar的索引位置。

譬如題目中的bar 2的高度爲5,它的ln爲1,rn爲4。包含bar 2的矩形區域面積爲(4 - 1 - 1) * 5 = 10。

我們可以從左到右遍歷所有bar,並將其push到一個stack中,如果當前bar的高度小於棧頂bar,我們pop出棧頂的bar,同時以該bar計算矩形面積。那麼我們如何知道該bar的ln和rn呢?rn鐵定就是當前遍歷到的bar的索引,而ln則是當前的棧頂bar的索引,因爲此時棧頂bar的高度一定小於pop出來的bar的高度。

爲了更好的處理最後一個bar的情況,我們在實際中會插入一個高度爲0的bar,這樣就能pop出最後一個bar並計算了。

【參考答案】

www.jiuzhang.com/solutions/largest-rectangle-in-histogram/

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

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