如何解决交换数组中的元素导致问题
新年快乐。我有一个关于在 Python 环境下交换数组中的元素的问题。没有问题的代码是:
def findMissingNumber(nums):
length = len(nums)
result = []
i = 0
while i < length:
# num = nums[i]
target = nums[i] - 1
if nums[i] != i+1 and nums[i] != nums[target]:
# swap with the nums[i]-1
nums[target],nums[i]= nums[i],nums[target]
else:
i += 1
for j in range(length):
if nums[j] != j+1:
result.append(j+1)
return result
print(findMissingNumber([2,3,1,8,2,5,1]))
print(findMissingNumber([2,4,2]))
print(findMissingNumber([2,1]))
答案:
[4,6,7]
[3]
[4]
错误的是:
def findMissingNumber(nums):
length = len(nums)
result = []
i = 0
while i < length:
num = nums[i]
target = num - 1
if num != i+1 and num != nums[target]:
# swap with the num-1
nums[target],num = num,7]
[3,4]
[3,4]
我不知道为什么参考(我应该称之为)引起麻烦。你介意详细解释一下吗。
谢谢。
解决方法
带有注释的固定代码。
def findMissingNumber(nums):
length = len(nums)
result = []
i = 0
while i < length:
# num and nums[i] have the same value but doesnt refer to same memory location
num = nums[i]
target = num - 1
if num != i+1 and num != nums[target]:
# swap with the num-1
# incorrect swap,num value is not referencing the list index,but has a copy of its value,# so instead of swapping value with num,do it from the list like below
# nums[target],num = num,nums[target]
# correct swap
nums[target],nums[i] = nums[i],nums[target]
else:
i += 1
for j in range(length):
if nums[j] != j+1:
result.append(j+1)
return result
print(findMissingNumber([2,3,1,8,2,5,1]))
print(findMissingNumber([2,4,2]))
print(findMissingNumber([2,1]))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。