前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 1060. 有序数组中的缺失元素(二分查找)

LeetCode 1060. 有序数组中的缺失元素(二分查找)

作者头像
Michael阿明
发布2021-02-19 10:15:17
1.5K0
发布2021-02-19 10:15:17
举报
文章被收录于专栏:Michael阿明学习之路

文章目录

1. 题目

给出一个有序数组 A,数组中的每个数字都是 独一无二的,找出从数组最左边开始的第 K 个缺失数字。

代码语言:javascript
复制
示例 1:
输入:A = [4,7,9,10], K = 1
输出:5
解释:
第一个缺失数字为 5 。

示例 2:
输入:A = [4,7,9,10], K = 3
输出:8
解释: 
缺失数字有 [5,6,8,...],因此第三个缺失数字为 8 。

示例 3:
输入:A = [1,2,4], K = 3
输出:6
解释:
缺失数字有 [3,5,6,7,...],因此第三个缺失数字为 6 。
 
提示:
1 <= A.length <= 50000
1 <= A[i] <= 1e7
1 <= K <= 1e8

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/missing-element-in-sorted-array 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 一次遍历

  • 相邻的数做差,进行判断,对 k 进行更新,直到 k <= 0 停止
代码语言:javascript
复制
class Solution {
public:
    int missingElement(vector<int>& nums, int k) {
    	int i = 0, n = nums.size(), ans;
    	for(i = 0; i < n-1; ++i)
    	{
    		if(nums[i+1]-nums[i]-1 < k)
    			k -= nums[i+1]-nums[i]-1;
    		else
    		{
    			ans = nums[i]+k;
    			return ans;
    		}
    	}
    	return nums[n-1]+k;
    }
};

124 ms 29.6 MB

2.2 二分查找

代码语言:javascript
复制
class Solution {
public:
    int missingElement(vector<int>& nums, int k) {
        int l = 0, r = nums.size()-1, mid, miss;
        while(l <= r)
        {
            mid = l+((r-l)>>1);
            miss = countmissing(nums, mid);
            if(miss < k)
                l = mid+1;
            else if(miss > k)
                r = mid-1;
            else
                return nums[mid]-1;

        }
        return nums[r]+k-countmissing(nums,r);
    }
    int countmissing(vector<int>& nums, int i)
    {
        return nums[i]-nums[0]-i;
    }
};

144 ms 29.6 MB

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
    • 2.1 一次遍历
      • 2.2 二分查找
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档