📅  最后修改于: 2023-12-03 15:12:38.749000             🧑  作者: Mango
给定一个由 n 个整数构成的数组,数组中的每个整数都在 1 和 n 之间(包括 1 和 n)。请以任意顺序返回数组中缺失的所有数字和重复的所有数字。
输入: nums = [1,2,2,4]
输出: [2,3]
输入: nums = [1,1]
输出: [1,2]
该问题可以通过排序数组来解决。由于所有数字都是正的,因此遍历整个数组并将出现的每个数字标记到其他元素中(例如将元素从 nums[i] 变为 -nums[i])。如果某个数字已经出现过,则 nums[|nums[i]| - 1] 是负的。如果再次遇到相同数字,则将其添加到答案中。
随后,遍历整个数组,如果遇到了一个正数,则说明它没有出现过,将其下标加一并添加到答案中。
def findDuplicates(nums):
size = len(nums)
res = []
for i in range(size):
index = abs(nums[i]) - 1
if nums[index] < 0:
res.append(index + 1)
nums[index] = -nums[index]
for i in range(size):
if nums[i] > 0:
res.append(i + 1)
return res