如何解决按索引交换列表中的值
我遇到了通过使用索引作为占位符来跟踪出现哪些正整数来交换列表中的值的问题。
问题在这里(来自Leetcode)
给定一个未排序的整数数组 nums,找到最小的缺失正整数。
你必须实现一个在 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,3,1]
swapping to index 3 value -1
swapping to index 0 value 1
**[-1,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,1]
swapping to index 3 value -1
swapping to index 0 value 1
[1,-1] (as intended)
有人可以向我解释一下吗?
解决方法
当你交换价值时
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 然后它可以正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。