2013-02-06 54 views
-2

有一個2D二進制數組(的01 2D陣列),其中m行和列n;給出一個有效的算法來尋找完全由1 s組成的最大子陣列(矩形)的面積。算法來尋找最大子陣列(矩形)的區域完全由1的

public int findMaxRectangleArea(int[][] A,int m,int n); 

有人可以幫助我的算法部分?

+2

你在面試? – ogzd

+0

或做功課? – sotapme

+0

爲什麼所有的語言標籤?你必須提供這些解決方案嗎?你可能想標記'language-agnostic'而不是 – Kos

回答

0

這一切都取決於你的離子最小陣列尺寸有多大。如果它小於目標平臺上的最大單詞大小,則可以將陣列製作成一維位圖陣列,並使用一系列滑動位圖遮罩窗口來查找矩形。

2

我想嘗試這樣的做法:

迭代左至右逐列,直到找到一個0

0可能已經確定的1的兩個矩形:

  • 它上面的所有行從頂部
  • 留給位置的0

其中一人左更大,記住它。

First step

然後遞歸下降到三個未知部門(其中兩個部分未知)可能仍然包含一個矩形比更大的你已經發現:

Second step

確保你不要重複遍歷已知的行,這是多餘的。

我相信這個解決方案可以看看每場最多兩次(其中一個遞歸步驟的部門重疊),所以應該在θ(X * Y)上運行。

+0

還沒有那麼...有一個合併的步驟,你省略了這不是微不足道的。所以你分找到0後的問題,但後來經過遞歸地解決了更小的碎片,你需要合併... – thang

+0

是合併步驟真的不是小事?如果解決方案的規模較小,則完全包含在其中一個解決方案中,因此整個解決方案只是四個解決方案中最大的解決方案。如果我錯了,請舉個例子。 – Kos

+0

我不知道,但它沒有列出...瑣碎或不是主觀的。我的觀點是解決方案不完整。我沒有想過... – thang