最大的矩形

2021-10-01 01:47:14 字數 1612 閱讀 5434

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。

求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。

以上是柱狀圖的示例,其中每個柱子的寬度為 1,給定的高度為 [2,1,5,6,2,3]。

圖中陰影部分為所能勾勒出的最大矩形面積,其面積為 10 個單位。

示例:輸入: [2,1,5,6,2,3]

輸出: 10

用乙個棧儲存柱子高度。先將-1壓入棧。當當前柱子高度h[i]>h[i-1]時,將h[i]的下標i入棧;當當前柱子高度h[i]<=h[i-1]時,將棧頂元素出棧,直到棧頂的柱子高度小於h[i]為止。在此過程中,以出棧元素為高的最大矩形面積為(i−stack[top−1]−1)×h[stack[top]](高度就是當前棧頂元素對應的高度,寬度是當前棧頂元素的前乙個元素與h[i]之間的距離,因為當前棧頂元素與h[i]之間的柱子都比當前棧頂元素高,與當前棧頂元素的前乙個元素之間的柱子(不在棧內)也比當前棧頂元素高);當棧頂元素為-1時,入棧;當遍歷到最後乙個柱子,完成上述操作後,棧中仍有元素,記此時棧頂元素的下乙個位置為x(即整個陣列長度,因為此時棧頂元素一定是陣列最後乙個元素),棧中元素依次出棧,並計算以出棧元素為高的最大矩形面積(x−stack[top-1]−1)×h[stack[top]]。

class

solution

st.push

(i);

}while

(st.

top()!=

-1)return res;}}

;

給定乙個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。

示例:輸入:

[[「1」,「0」,「1」,「0」,「0」],

[「1」,「0」,「1」,「1」,「1」],

[「1」,「1」,「1」,「1」,「1」],

[「1」,「0」,「0」,「1」,「0」]

]輸出: 6

按列(或按行)遍歷陣列,用乙個dp陣列記錄此時每個元素的最大寬度(或高度),於是就轉化為了上一題柱狀圖中最大的矩形,如下圖所示。

最大的矩形

最大的矩形問題 poj2559 題解 單調棧做 給定從左到右多個矩形,已知這此矩形的寬度都為1,長度不完全相等。這些矩形相連排成一排,求在這些矩形包括的範圍內能得到的面積最大的矩形,列印出該面積。所求矩形可以橫跨多個矩形,但不能超出原有矩形所確定的範圍。建立乙個單調遞增棧,所有元素各進棧和出棧一次即...

最大的矩形

問題描述 在橫軸上放了n個相鄰的矩形,每個矩形的寬度是1,而第i 1 i n 個矩形的高度是hi,這n個矩形構成了乙個直方圖,例如,下圖中六個矩形的高度就分別是3,1,6,5,2,3 請找出能放在給定直方圖裡面積最大的矩形,他的邊要與座標軸平行。輸入格式 第一行包含乙個整數n,即矩形的數量 1 n ...

ACM 最大的矩形

試題編號 3 試題名稱 最大的矩形 時間限制 1.0s 記憶體限制 256.0mb 問題描述 在橫軸上放了n個相鄰的矩形,每個矩形的寬度是1,而第i 1 i n 個矩形的高度是hi。這n個矩形構成了乙個直方圖。例如,下圖中六個矩形的高度就分別是3,1,6,5,2,3。請找出能放在給定直方圖裡面積最大...