📅  最后修改于: 2023-12-03 15:36:47.402000             🧑  作者: Mango
在一组包含N个元素的数组中,每个元素的取值范围是[1, N]。其中,有三个元素出现了两次,其他元素只出现了一次。请找出这三个元素。
因为要使用O(1)的空间,所以不能用哈希表等数据结构。
我们可以使用如下的方法:
具体实现参见下面的代码片段。
def find_duplicate_numbers(nums):
res = []
for i in range(len(nums)):
index = abs(nums[i]) - 1
if nums[index] > 0:
nums[index] = -nums[index]
else:
res.append(abs(nums[i]))
for i in range(len(nums)):
if nums[i] < 0:
nums[i] = -nums[i]
for i in range(len(nums)):
if nums[i] != i + 1:
res.append(i + 1)
res.append(nums[i])
break
return res
由于只进行了三次遍历,没有使用任何额外的空间,所以时间和空间复杂度均为O(1)。