📅  最后修改于: 2023-12-03 15:22:02.067000             🧑  作者: Mango
在从排序数组中查找缺失数字时,需要考虑到该数组可能存在重复元素。因此需要先确定该数组中存在的数字范围,然后根据这个范围,查找出该范围内的缺失数字。
以下是一个来自leetcode的例题:
假设一个排序数组以升序排列,其中元素不重复。 在范围[0, n]内搜索缺失的数字。 如果所有数字都在[0,n]范围内,则范围外没有数字。
输入: [0, 1, 3, 4, 7, 9] 输出: [2, 5, 6, 8]
在上面的示例中,输入数组中的数字范围是[0,9]。 因此,我们需要查找范围内缺失的所有数字,并返回它们。
def findMissingNumbers(nums):
missingNumbers = []
n = len(nums)
i = 0
while i < n:
j = nums[i]
if j < n and nums[j] != nums[i]:
nums[i], nums[j] = nums[j], nums[i]
else:
i += 1
for i in range(n):
if nums[i] != i:
missingNumbers.append(i)
return missingNumbers
上面的解法时间复杂度为O(n),空间复杂度为O(1)。
我们使用了一个类似于排序的方法,先将数字放到正确的位置上,然后再进行遍历,依次查找缺失的数字。
从排序数组中查找所有缺失的数字需要确定数组的数字范围,根据这个范围查找出该范围内的缺失数字。在多次出现的数字存在时,需要注意处理。