問題描述:
給定乙個矩陣,該矩陣中的元素只包含1和0,找出該矩陣中全為1的矩形面積的最大值。
如:1 1 0 0 0
1 0 0 0 1
1 0 0 0 1
對應的矩形面積的最大值為3。
整體思路:
通過求解每列中到當前行的連續1的個數,然後將該題轉化為求解柱狀圖最大面積問題。
舉個栗子:
1 1 0 1 0
1 0 1 1 1
1 0 1 0 1
計算每列中到當前行的連續1的個數得到:
1 1 0 1 0
2 0 1 2 1
3 0 2 0 2
把得到的矩陣的每一行看成乙個柱狀圖,求每個柱狀圖可形成的最大面積,最終求最大,即為全為1的矩形面積的最大值。
其它步驟比較簡單,問題的關鍵就變成了柱狀圖可形成的最大面積的求解。柱狀圖可形成的最大面積問題詳見這裡。
c++**
// an highlighted block
#include
#include
#include
using namespace std;
//求矩陣中最大的全為1的矩形的面積
intmaxsquarearea
(int
* s,
int m,
int n)
;int
barsmaxarea
(int
* gheights,
int nitem)
;struct cell};
intmain()
cout<} cout
maxsquarearea
(s, m, n)
] s;
return0;
}int
maxsquarearea
(int
* s,
int m,
int n)
}int vmax =0;
for(
int i=
0;i++i)
return vmax;
}//計算柱狀圖最大面積
intbarsmaxarea
(int
* gheights,
int nitem)
else
node t
(height, currentposition)
;//當前節點
while
( s.
top(
).height > height)
} s.
push
(node
(height, t.startidx));
}return maxarea;
}
MaLab中求矩陣最大值
max函式和min函式 在matlab中,max和min函式分別能求一維的最大值和一維的最小值 如果想求二維矩陣x的最大值,可用max max x 這裡不是特別明白,有時間的話找高人問一下 a rand 4,5 取隨機數,也可以像你那樣input手工輸入。m,ind max a 最大值及其索引,a ...
子矩陣和的最大值
本部落格只是為了記錄我剛了解的演算法思想。首先是考慮一維的情況 可以這樣想從第乙個元素掃到最後乙個,不斷的維護最大值sum。當掃到第 i 個元素的時候,子陣列的和要 麼加上這個元素,要麼從這個元素從新開始。當前面i 1的子陣列的和小於0,那麼加上第i個元素,會比直接用 第i個元素開始小。相反,如果前...
1102 面積最大的矩形
有乙個正整數的陣列,化為直方圖,求此直方圖包含的最大矩形面積。例如 2,1,5,6,2,3,對應的直方圖如下 面積最大的矩形為5,6組成的寬度為2的矩形,面積為10。收起第1行 1個數n,表示陣列的長度 0 n 50000 第2 n 1行 陣列元素a i 1 a i 10 9 輸出最大的矩形面積62...