我正在编写一个带有排列的函数(例如[2,0,1,3]
和一个数组来应用置换(例如['a','b','c','d']
)。使用上面两个输入,输出将是{ {1}}
以下解决方案直接来自本书并声称是O(1)空间。
['b','c','a','d']
然而,不是行:
def apply_permutation(perm, A):
for i in range(len(A)):
next = i
while perm[next] >= 0:
A[i], A[perm[next]] = A[perm[next]], A[i]
temp = perm[next]
perm[next] -= len(perm)
next = temp
perm[:] = [a + len(perm) for a in perm]
return A
通过列表理解创建一个全新的数组,然后将其分配给perm[:] = [a + len(perm) for a in perm]
?在哪种情况下实际上是O(N)空间?
此外,将新创建的列表分配给perm
而不是perm[:]
会增加什么值?