根据数组元素和下标的对应关系
- 将数组内元素作为下标,再将其对应的数变为负数
- 样对于重复的数作为下标会被重复访问到,下标就是重复的那个数
- 数组内有的元素作为下标对应位置的元素都会被置为负数
- 组内缺失的那个元素访问不到还是正数
def findErrorNums(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
n = len(nums)
for i in range(n):
index = abs(nums[i])-1 #这里前面的操作可能将后面的数变为负数了,所以要取绝对值
if nums[index] < 0: #这样对于重复的数作为下标其对应数组内的数会被重复访问到,而下标就是重复的那个
res1 = index + 1
else:
nums[index] *= -1
for i in range(n):
if nums[i] > 0: #这样一来数组内有的元素作为下标对应位置的元素都会被置为负数
res2 = i + 1 #数组内缺失的那个元素访问不到还是正数,所以下标就是对应的数组内缺失的元素
return [res1,res2]
数学,简单
总和 = 没有缺失的结果
去重数组和 = 去除重复之后的数组的和
数组和 = 数组的和
缺失 = 总和 - 去重数组和
多余 = 数组和 - 去重数组和
def findErrorNums(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
n = len(nums)
total = n*(n+1)/2
num = sum(set(nums))
miss = total-num
dul =sum(nums) - num
return [dul,miss]