問題引入——求解直方圖中最大的矩形面積
核心思想:讓二維陣列轉換成多層的一維陣列,再根據一維陣列構建直方圖
//主函式,讓二維陣列轉換成多層的一維陣列,再根據一維陣列構建直方圖
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...