Hackerrank Minimum交换2循环从代码中的一个小变化到无穷大



这个挑战要求您找到最小数量的交换,以便按升序对一个混乱的连续数字数组进行排序。这是问题的正确函数:

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相比,这是不变的,现在考虑将它们存储在临时变量ab中。然后它一个接一个地分配给lhs项。首先是aarr[i],仅在将b分配给arr[arr[i]-1]之后,此时arr[i]已经发生了变化,因此这不再等同于使用index

最新更新