这是一个采访问题:给定一个布尔矩阵找到最大的连续方形子矩阵的大小,该子矩阵只包含“真”元素。
我在SO上发现了这个question,但却不明白答案。所提出的算法从左上方向右下方移动一条对角线,并随着线的移动跟踪“真实”元素的矩形。
我的问题:
答案 0 :(得分:4)
我无法理解the answer in the link you posted,我不认为那里的复杂性对你的问题是最佳的。 (它声称存在O(N^(3/2)*logN)
算法,其中N=n*n
是原始矩阵中元素的数量。)
对于您最大的 square 子矩阵问题,有一个DP算法,其复杂度与元素数量成线性关系:
让原始矩阵为A[n][n]
,我们正在尝试找到矩阵B[n][n]
,其中B[i][j]
表示最右边的子矩阵的大小,其右下角元素为{{ 1}}。所以
A[i][j]
最大的B [i] [j]就是答案。
P.S。我没有检查数组范围以进行简化。您可以只考虑超出范围的元素为零。