leetcode1539

第 k 个缺失的正整数
Category Difficulty Likes Dislikes
algorithms Easy (54.07%) 157 -
Tags
Companies
给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。

请你找到这个数组里第 k 个缺失的正整数。

示例 1:

输入:arr = [2,3,4,7,11], k = 5
输出:9
解释:缺失的正整数包括 [1,5,6,8,9,10,12,13,...] 。第 5 个缺失的正整数为 9 。
示例 2:

输入: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) 的算法解决此问题吗?

Discussion | Solution

class Solution {
public:
    // 数组是严格递增的
    // 利用严格递增和数组的特性,可以知道在某个位置。利用这个位置上的值arr[idnex]和这个位置index做差额,可以得到1-arr[index]之间缺了多少个值
    int findKthPositive(vector<int>& arr, int k) {
        int l = 0, r = arr.size() - 1;
        while(l < r)
        {
            int mid = l + ((r-l)>>1);
            if((arr[mid]-mid-1) < k)
                l = mid + 1;
            else
                r = mid;
        }
        if(l == arr.size()-1 && (arr[l]-l-1) < k)
            return l+1+k;
        if(l == 0)
            return k;
        return l + k;
    }
};

posted @ 2022-11-11 17:15  雷leileilei  阅读(8)  评论(0编辑  收藏  举报