这个挑战要求您找到最小数量的交换,以便按升序对一个混乱的连续数字数组进行排序。这是问题的正确函数:
def minimumSwaps(arr):
n = 0
i =0
while i < len(arr):
index = arr[i]-1
if arr[i] != arr[index]:
arr[i], arr[index] = arr[index], arr[i]
n+=1
print(arr)
else:
i+=1
return n
然而,如果我去掉index=arr[I]-1,并将index替换为arr[I]-1,到处都是这样的:
def minimumSwaps(arr):
n = 0
i =0
while i < len(arr):
if arr[i] != arr[arr[i]-1]:
arr[i], arr[arr[i]-1] = arr[arr[i]-1], arr[i]
n+=1
print(arr)
else:
i+=1
return n
循环达到无穷大,我不明白为什么会出现这种情况。任何帮助都将不胜感激。
arr[i], arr[arr[i]-1] = arr[arr[i]-1], arr[i]
首先评估rhs项arr[arr[i]-1], arr[i]
,与使用index
相比,这是不变的,现在考虑将它们存储在临时变量a
和b
中。然后它一个接一个地分配给lhs项。首先是a
到arr[i]
,仅在将b
分配给arr[arr[i]-1]
之后,此时arr[i]
已经发生了变化,因此这不再等同于使用index
。