Algorithm 求完全由1'组成的最大子数组(矩形)面积的算法;s

Algorithm 求完全由1'组成的最大子数组(矩形)面积的算法;s,algorithm,language-agnostic,Algorithm,Language Agnostic,有一个二维二进制数组(由0和1组成的二维数组),其中m行和n列;给出了求完全由1s组成的最大子数组(矩形)面积的有效算法 public int findMaxRectangleArea(int[][] A,int m,int n); 有人能帮我做一下算法部分吗?这取决于你的最小数组维数有多大。如果它小于目标平台上的最大字数,则可以将数组设置为位图的1D数组,并使用一系列滑动位掩码窗口查找矩形 我会尝试这样的方法: 从左到右逐行迭代,直到找到0 此0可能已经识别了1s的两个矩形: 上面的所有行

有一个二维二进制数组(由
0
1
组成的二维数组),其中
m
行和
n
列;给出了求完全由
1
s组成的最大子数组(矩形)面积的有效算法

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

有人能帮我做一下算法部分吗?

这取决于你的最小数组维数有多大。如果它小于目标平台上的最大字数,则可以将数组设置为位图的1D数组,并使用一系列滑动位掩码窗口查找矩形

我会尝试这样的方法:

从左到右逐行迭代,直到找到
0

0
可能已经识别了
1
s的两个矩形:

  • 上面的所有行
  • 从左上角到
    0
其中一个更大,记住了

然后递归下降到三个未知扇区(其中两个部分未知),其中可能仍然包含一个比您已经找到的矩形大的矩形:

确保不再迭代已知行,这是多余的


我相信这个解决方案最多可以查看每个字段两次(其中递归步骤的扇区重叠),所以它应该在θ(x*y)中运行。

你在面试吗?

针对
C#
发布了一个类似的问题,条件略有不同(0和1的和相等)。您将在接受的答案中找到伪代码:。为什么要使用所有语言标记?您是否必须在这些方面提供解决方案?你可能会想标记
语言不可知论
而不是像某人的数字逻辑设计作业(k-map)还没有完成。。。有一个合并步骤,您忽略了,这不是微不足道的。所以你在找到0之后就把问题分开了,但是在递归地解决了较小的部分之后,你需要合并…合并步骤真的不是很简单吗?如果一个解决方案是在较小的部分,它完全包含在其中一个,所以整个解决方案只是四个中最大的一个。如果我错了,请举个例子。我不知道,但没有列出。。。琐碎与否是主观的。我的观点是,解决方案是不完整的。我还没想过。。。