我手头有一个任务,我需要整理一个
n
-通过重复交换两个项,其项为0~n-1且没有重复项的长度列表。
arr[0]
索引为
arr[0]
(即。
arr[arr[0]]
)直到
arr[0] = 0
,然后重复对
arr[1]
通过
arr[n-1]
.
arr=[1,2,0,4,3]
,我会先交换
arr[0]
arr[arr[0]]
(即。
),正在获取
[2,1,0,4,3]
,然后交换
arr[0]
具有
再说一次,(这次)
arr[2]
),正在获取
[0,1,2,4,3]
arr[3]
arr[4]
,得到最终结果
[0,1,2,3,4]
.
代码如下:
while i < len(arr) - 1:
while arr[i] != i:
arr[i], arr[arr[i]] = arr[arr[i]], arr[i] # not working
arr[arr[i]], arr[i] = arr[i], arr[arr[i]] # working
i += 1
arr[i], arr[arr[i]] = arr[arr[i]], arr[i]
arr[i] = arr[arr[i]]
).
以相反的顺序交换(即。
arr[arr[i]], arr[i] = arr[i], arr[arr[i]]
)工作。
任何人都能解释背景中发生了什么以及为什么第一个案例不起作用?谢谢。