📅  最后修改于: 2023-12-03 15:10:39.815000             🧑  作者: Mango
在一个未排序的数组中,找到第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)$。