我有一个场景,我有一个点网格。例如,在下面m x n(即5 x 6)网格的情况下,假设左上角是0,0(第一行,第一列)。缺少点(1,1)、(1,3)、(1,4)、(2,3)、(2,4)、(3,1)。
我需要找到正方形的数目。正方形的每一边都应该填满圆点。所以下面的答案是4(也包括外面的大正方形)。所以我的问题是a)什么是最好的方法来表示这个问题的输入,b)什么是求平方的算法。
正方形可以围在另一个正方形内。所有的方块都要数。
......
. . .
... .
. ....
......
下面是我到目前为止的逻辑。i/p是1和0的2d数组(1是点,0是间隙)。
set count=0
loop i =0 to m //each row
loop j = 0 to n //each colum
ifSquareFormedAt(i,j)
count++
func ifSquareFormedAt(i,j){
???? //what will be the logic here?
}
1条答案
按热度按时间yrefmtwq1#
简单算法
O(n^3)
复杂性在哪里n
是矩形大小:按行和列计算累计和,所以
R[i][j]
包含从左侧到第j个索引的第i行中的个数,C[i][j]
包含从顶部到第i个索引的第j列中的个数。现在遍历所有可能的大小方格
k>1
左上角[i][j]
获取行差并将其与k进行比较,对列差执行相同的操作python代码5结果6(外部矩形不是正方形)