📅  最后修改于: 2023-12-03 14:58:01.600000             🧑  作者: Mango
给定一个递增序列和一个数字 k,求出在序列中第 k 个缺失的元素。如果第 k 个缺失的元素不存在于给定序列中,则返回 -1。
例如,给定序列 [2, 3, 5, 7, 9]
,k=1,那么第一个缺失的数是 4,所以应该返回 4。
首先需要明确的是,题目中的序列是一个递增序列,可以利用这个性质来解决问题。假设序列为 $S$,那么可以发现,
为实现这一转化,需要使用两个指针 i
和 j
,分别指向序列中当前遍历的元素和应该存在的元素。初始时,i=0
,j=S_0
。
i
和 j
都加 1。k
减去缺失的数量,并将 j
加上缺失的数量。j-1
。def find_kth_missing_element(s: List[int], k: int) -> int:
n = len(s)
if k > s[-1] - s[0] - n + 1: # 第 k 个缺失的数不存在于给定序列中
return -1
i, j = 0, s[0]
while True:
if i == n or s[i] != j:
k -= 1
else:
i += 1
if k == 0: # 已经找到第 k 个缺失的元素
return j
if k < 0: # 第 k 个缺失的元素不存在于给定序列中
return -1
j += 1