求矩陣的最大子矩陣面積

2021-10-10 16:33:36 字數 2303 閱讀 8200

問題引入——求解直方圖中最大的矩形面積

核心思想:讓二維陣列轉換成多層的一維陣列,再根據一維陣列構建直方圖

//主函式,讓二維陣列轉換成多層的一維陣列,再根據一維陣列構建直方圖

public

intmaxrecsize

(int

map)

int maxarea =0;

int[

] height =

newint

[map[0]

.length]

;for

(int i =

0; i < map.length; i++

)//計算每次從第一行向下分層後每一次的最大面積

//陣列表示直方圖最大的面積

public

intmaxrecfrombottom

(int

height)

int maxarea =0;

//單調棧

stack

stack =

newstack

<

>()

;//這個for迴圈遍歷陣列的每乙個數

for(

int i =

0; i < height.length; i++

)//如果arr[i]值大於棧頂,直接壓入

stack.

push

(i);

}//最後棧內可能還剩東西,這個while在結算棧中剩餘的內容

while

(!stack.

isempty()

)return maxarea;

}

完整**

/**

* @author lj

* @description: 求矩陣的最大子矩陣面積

* @date 2020-11-20 14:13

* @qq 851477108

*///單調棧的應用

public

class

maxrecarea

int maxarea =0;

int[

] height =

newint

[map[0]

.length]

;for

(int i =

0; i < map.length; i++

)//計算每次從第一行向下分層後每一次的最大面積

maxarea = math.

max(

maxrecfrombottom

(height)

, maxarea);}

return maxarea;

}//陣列表示直方圖最大的面積

public

intmaxrecfrombottom

(int

height)

int maxarea =0;

//單調棧

stack

stack =

newstack

<

>()

;//這個for迴圈遍歷陣列的每乙個數

for(

int i =

0; i < height.length; i++

)//如果arr[i]值大於棧頂,直接壓入

stack.

push

(i);

}//最後棧內可能還剩東西,這個while在結算棧中剩餘的內容

while

(!stack.

isempty()

)return maxarea;

}}

好兄弟們給個贊,聽說給贊的考試和四六級面試都必過

聯絡博主qq851477108

備註csdn

dp 最大子矩陣面積

在乙個平面內隨機出現一些連續的區域,以這些區域構成乙個矩形,求最大的矩形面積。解決這一類問題的思路是 列舉所有高度,通過記憶化記錄左右側最遠能到達的區域。以下以乙個類似柱狀圖的模型來說明 要求求出圖中最大的矩形面積。圖中存在四個不同的高度。高度1左右都沒有更高的,記l1 1,r1 1 高度2是最低的...

求最大子矩陣的大小

給定乙個整型矩陣map,其中的值只有0和1兩種,求其中全是1的所有矩形區域中,最大矩形區域為1的數量。時間複雜度達到o mn 具體思路請參考原書 include include include using namespace std intmaxrecfrombottom int height,in...

求最大子矩陣的大小

題目 給定乙個整型矩陣map,其中的值只有0和1兩種,求其中全是1的所有矩陣區域中,最大的矩形區域為1的數量。思路 步驟1 矩陣的行數為n,以每一行做切割,統計以當前行作為底的情況下,每個位置往上的1的數量。使用高度陣列height來表示。例如 map 1 0 1 1 1 1 1 1 1 1 1 0...