我在列表中遇到了一个交换值的问题,使用索引作为占位符来跟踪出现了哪些正整数。
问题就在这里(来自Leetcode)
给定一个未排序的整数数组,查找丢失的最小正整数。 您必须实现一个在O(n)时间内运行并使用常量额外空间的算法。 投入: nums = 3,4,-1,1 产出:2 示例3
我最初的做法是:
for i in range(len(arr)):
while arr[i] > 0 and len(arr) > arr[i] and i != arr[i]-1 and arr[i] != arr[arr[i]-1]:
print('swapping to index ' + str(i) + ' value ' + str(arr[arr[i] - 1]))
print('swapping to index ' + str(arr[i]-1) + ' value ' + str(arr[i]))
arr[i], arr[arr[i] - 1] = arr[arr[i] - 1], arr[i]
print(arr)但这产生了以下结果:
swapping to index 0 value -1
swapping to index 2 value 3
[-1, 4, 3, 1]
swapping to index 3 value -1
swapping to index 0 value 1
**[-1, 4, 1, -1]** (??)但是,如果我设置一个变量j = arr[i] - 1并运行相同的代码
for i in range(len(arr)):
while arr[i] > 0 and len(arr) > arr[i] and i != arr[i]-1 and arr[i] != arr[arr[i]-1]:
j = arr[i] - 1
print('swapping to index ' + str(i) + ' value ' + str(arr[j]))
print('swapping to index ' + str(j) + ' value ' + str(arr[i]))
arr[i], arr[j] = arr[j], arr[i]
print(arr)这个互换是正确的
swapping to index 0 value -1
swapping to index 2 value 3
[-1, 4, 3, 1]
swapping to index 3 value -1
swapping to index 0 value 1
[1, 4, 3, -1] (as intended)有人能给我解释一下吗?
发布于 2021-07-12 07:58:13
当您交换值时
arr[i], arr[arr[i] - 1] = arr[arr[i] - 1], arr[i]然后它运行如下
variable = arr[arr[i] - 1], arr[i]
arr[i], arr[arr[i] - 1] = variable但是在第二行,它仍然必须赋值one by one,并且首先它将赋值
arr[i] = ...以及以后的
arr[arr[i] - 1] = ...但是当它分配第二个值时,arr[i]已经有了新的值而不是旧的值--这就产生了问题。
当你使用j = arr[i] - 1和
arr[j] = ...然后j有所有的时间旧值- ant,然后它正确地工作。
https://stackoverflow.com/questions/68342675
复制相似问题