【二分查找】1539. 第 k 个缺失的正整数

简介: 【二分查找】1539. 第 k 个缺失的正整数

📍前言

🕺作者: 迷茫的启明星


学习路线

C语言从0到1

C++初阶

数据结构从0到1

😘欢迎关注:👍点赞🙌收藏✍️留言


🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢阅读!!!


持续更新中~


【二分查找】1539. 第 k 个缺失的正整数

问题描述

给定一个严格升序排列的正整数数组 arr 和一个整数 k。请你找到这个数组里第 k 个缺失的正整数。


示例

输入:arr = [2,3,4,7,11], k = 5


输出:9


解释:缺失的正整数包括 [1,5,6,8,9,10,12,13,…] 。第 5 个缺失的正整数为 9 。


解题思路

这道题目可以使用二分查找算法来解决。二分查找算法的核心思想是每次将搜索区间减半,从而在有限的时间内找到目标值。


初始化搜索区间的左右边界 l 和 r。其中,l 初始化为 -1,r 初始化为数组长度 arr.size()。


当 r - l > 1 时,进行二分查找:


a. 计算中间位置 mid。


b. 判断 arr[mid] - mid - 1 与 k 的关系:


如果 `arr[mid] - mid - 1 >= k`,说明第 `k` 个缺失的正整数在 `mid` 的左侧,更新 `r` 为 `mid`。


如果 `arr[mid] - mid - 1 < k`,说明第 `k` 个缺失的正整数在 `mid` 的右侧,更新 `l` 为 `mid`。


当二分查找结束时,r 即为第 k 个缺失的正整数在数组中的位置。


返回 r + k 作为答案。


代码实现

下面是一个使用二分查找算法解决问题的 C++ 代码实现:


class Solution {
public:
    int findKthPositive(vector<int>& arr, int k) {
        int l=-1,r=arr.size();
        int mid;
        while(r-l>1)
        {
            mid=(r+l)>>1;
            if(arr[mid]-mid-1>=k)
            {
                r=mid;
            }
            else
            {
                l=mid;
            }
        }
        return r+k;
    }
};



总结

这道题目使用二分查找算法在 O(log n) 的时间复杂度内解决了问题。二分查找算法的关键在于每次将搜索区间减半,从而在有限的时间内找到目标值。在本题中,我们利用二分查找算法在严格升序排列的正整数数组中寻找第 k 个缺失的正整数。


相关文章
|
2月前
Leetcode第41题(缺失的第一个正数)
这篇文章介绍了解决LeetCode第41题“缺失的第一个正数”的两种方法:使用哈希表和调整数组元素位置,以实现时间复杂度为O(n)且只使用常数级别额外空间的解决方案。
42 0
Leetcode第41题(缺失的第一个正数)
|
7月前
|
算法
LeetCode算法题---无重复字符的最长子串、寻找两个正序数组的中位数(三)
LeetCode算法题---无重复字符的最长子串、寻找两个正序数组的中位数(三)
66 0
|
2月前
|
7月前
|
机器学习/深度学习 算法 测试技术
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
|
5月前
|
存储
2559. 统计范围内的元音字符串数(前缀和) o(n)时间复杂度
2559. 统计范围内的元音字符串数(前缀和) o(n)时间复杂度
|
7月前
|
存储 算法 Java
给定一个二叉树,请你找出其中最长严格递增路径的长度。(提示:使用动态规划)
给定一个二叉树,请你找出其中最长严格递增路径的长度。(提示:使用动态规划)
57 0
|
7月前
leetcode-41:缺失的第一个正数
leetcode-41:缺失的第一个正数
37 0
|
7月前
|
算法
leetcode-2097:合法重新排列数对
leetcode-2097:合法重新排列数对
43 0
LeetCode-41 缺失的第一个正整数
LeetCode-41 缺失的第一个正整数
|
算法 安全 Swift
LeetCode - #41 缺失的第一个正数
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。

热门文章

最新文章