LeetCode #1539. Kth Missing Positive Number
题目
1539. Kth Missing Positive Number
解题方法
设置start = missingcount = 0,遍历arr,记录到此数字为止一共有多少个缺失的数字missingcount,然后设置start = arr[i],设置当前位置为开始位置,这时如果missingcount >= k的话,说明需要选的数已经包含在遗漏的数里面了,break。循环结束根据missingcount和k的大小关系,如果missingcount < k,说明数组的最后一位还是比要选取的数小,所以要把数组遍历的最后一位的值加上k - missingcount,得到的就是第k个缺失值;如果missingcount >= k,就把break时的当前值加上k - missingcount,再减去自己本身的位置1,得到第k个数的值。
时间复杂度:O(n)
空间复杂度:O(1)
代码
class Solution:
def findKthPositive(self, arr: List[int], k: int) -> int:
start = missingcount = 0
for i in range(len(arr)):
missingcount += arr[i] - start - 1
start = arr[i]
if missingcount >= k: break
if missingcount < k:
return start + k - missingcount
else:
return start + k - missingcount - 1