📌  相关文章
📜  从给定的排序数组中查找所有缺失的数字(1)

📅  最后修改于: 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)。

解释:

我们使用了一个类似于排序的方法,先将数字放到正确的位置上,然后再进行遍历,依次查找缺失的数字。

总结

从排序数组中查找所有缺失的数字需要确定数组的数字范围,根据这个范围查找出该范围内的缺失数字。在多次出现的数字存在时,需要注意处理。