有一个二维二进制数组(0
和1
的二维数组),其中m
行和n
列;提供一种有效的算法来查找完全由1
s组成的最大子阵列(矩形)的区域。
public int findMaxRectangleArea(int[][] A,int m,int n);
有人可以帮我解决算法部分吗?
答案 0 :(得分:2)
我会尝试这样的方法:
逐行从左到右迭代,直到找到0
。
此0
可能已经识别出1
s的两个矩形:
0
其中一个更大,请记住它。
然后递归下降到三个未知的扇区(其中两个部分未知)可能仍然包含一个比你已经找到的更大的矩形:
确保不要再次遍历已知行,这是多余的。
我相信这个解决方案最多可以查看每个字段两次(递归步骤的扇区重叠),因此它应该以θ(x * y)运行。
答案 1 :(得分:0)
这取决于最小阵列尺寸的大小。如果它小于目标平台上的最大字大小,则可以将数组转换为一维位图数组,并使用一系列滑动位掩码窗口来查找矩形。