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
posted @ 2020-12-02 16:13  老鼠司令  阅读(62)  评论(0编辑  收藏  举报