📅  最后修改于: 2023-12-03 15:28:39.350000             🧑  作者: Mango
本题给出一个包含 n 个元素的数组,数组中每个元素的取值范围在1到n-1之间。其中某个元素重复了多次,而另外一个元素缺失了。找出这个元素的值。
输入: [4, 2, 1, 4, 3]
输出: 4
我们可以利用数组下标来寻找重复元素。我们遍历数组并将每个元素取反,然后检查数组中哪个元素已经被取反了。这个元素就是重复的元素。
然后我们遍历数组中所有元素,找到某个未被取反的元素。这个元素缺失了。
def find_missing_and_duplicate(arr):
n = len(arr)
duplicate = None
# 找到重复元素
for i in range(n):
idx = abs(arr[i]) - 1
if arr[idx] < 0:
duplicate = abs(arr[i])
else:
arr[idx] = -arr[idx]
# 找到缺失元素
missing = None
for i in range(n):
if arr[i] > 0:
missing = i + 1
return missing, duplicate
# 测试代码
print(find_missing_and_duplicate([4, 2, 1, 4, 3])) # 输出: (5, 4)
在本算法中,我们需要迭代两次。时间复杂度为 O(n)。