题目描述
给你一个 严格升序排列 的正整数数组 arr
和一个整数 k
。
请你找到这个数组里第 k
个缺失的正整数。
样例
输入:arr = [2,3,4,7,11], k = 5
输出:9
解释:缺失的正整数包括 [1,5,6,8,9,10,12,13,...]。第 5 个缺失的正整数为 9。
输入:arr = [1,2,3,4], k = 2
输出:6
解释:缺失的正整数包括 [5,6,7,...]。第 2 个缺失的正整数为 6。
限制
1 <= arr.length <= 1000
1 <= arr[i] <= 1000
1 <= k <= 1000
- 对于所有
1 <= i < j <= arr.length
的i
和j
满足arr[i] < arr[j]
。
算法
(线性遍历) $O(n)$
- 定义一个变量
last
,初始化为 0。 - 遍历过程中,判断
k
是否小于等于arr[i] - last - 1
。如果成立,则返回last + k
。否则k -= arr[i] - last - 1
。 - 遍历结束后,返回
last + k
。
时间复杂度
- 遍历数组一次,故总时间复杂度为 $O(n)$。
空间复杂度
- 仅需要常数的额外空间。
Go 代码
func findKthPositive(arr []int, k int) int {
last := 0
for _, v := range arr {
if k <= v - last - 1 {
return last + k
}
k -= v - last - 1
last = v
}
return last + k
}
应该是写反了
已修复
棒!