📜  未排序数组中的第k个缺失元素(1)

📅  最后修改于: 2023-12-03 15:10:39.815000             🧑  作者: Mango

未排序数组中的第k个缺失元素

在一个未排序的数组中,找到第k个缺失元素并返回它的值。缺失元素是指在数组中第k个未出现的正整数。

例子:

输入: nums = [4,7,9,10], k = 3 输出: 6 解释: 在数组中,缺失的数字依次为 [1,2,3,5,6,8,...],因此第三个缺失的数字是 6。

思路

我们可以遍历数组 nums,使用一个变量 miss 记录当前还缺失的个数。如果当前数字和上一个数字之间有缺失,那么 miss 就会减少对应的个数。如果经过遍历后,miss 的值仍然大于等于 k,说明第 k 个缺失的数字在数组 nums 的范围内,我们可以进行二分查找,找到第 k 个缺失的数字。

代码实现
from typing import List

def missingElement(nums: List[int], k: int) -> int:
    n = len(nums)
    miss = nums[-1] - nums[0] + 1 - n
    if k > miss:
        return nums[-1] + k - miss

    left, right = 0, n - 1
    while left < right:
        mid = (left + right) // 2
        miss = nums[mid] - nums[left] - (mid - left)
        if k > miss:
            k -= miss
            left = mid
        else:
            right = mid
    return nums[left] + k

时间复杂度:$O(\log n)$,其中 $n$ 为数组 nums 的长度。

空间复杂度:$O(1)$。