我正在练习并尝试编写O(n ^ 2)程序,该程序测试A中的同一行或同一列上是否有两个1。其中A = n x n分别为0和1的矩阵。
给定A为:
我应该得到2个匹配的答案。
一个在第一行,另一个在第三列。
我的第二次尝试:
def testLines():
count = 0
for x in range( 0, len(A)-1 ):
if( (A[x] == 1) & (A[x+1] == 1) ):
count+=1
for y in range( 0, len(A)-1):
if( (A[y] == 1 & A[y+1]) == 1 ):
count+=1
print( count, '1s has been matched in the array A')
testLines()
答案 0 :(得分:1)
您想嵌套两个循环并更改索引,以便同时解析x和y。目前,您的代码会遍历(全部x,y = 0)和(x = 0,全部y)。
A = [[0, 0, 1, 1],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 1, 0]]
def testLines():
count = 0
N = len(A)
for x in range(N):
for y in range(N):
if A[x][y] == 1:
if x+1 < N and A[x+1][y] == 1:
count += 1
if y+1 < N and A[x][y+1] == 1:
count += 1
print(count, '1s has been matched in the array A')
testLines()
或者,您可以采用Schwarzenegger的方式,而不检查(x+1, y)
或(x, y+1)
是否存在。这将引发IndexError
,您可以选择忽略。
def testLines():
count = 0
N = len(A)
for x in range(N):
for y in range(N):
try:
if A[x][y] == 1 and A[x+1][y] == 1 or A[x][y+1] == 1:
count += 1
except IndexError:
continue
print(count, '1s has been matched in the array A')
答案 1 :(得分:0)
您可以运行一个嵌套循环(n²)以获取行的总和。如果总和为2,则该行有两个1。
现在互换行和列(将行视为列,反之亦然)。
再次运行嵌套循环(n²)以检查列的总和。
n²+n²= O(n²)