【算法笔记】二分查找-有序数组中的缺失元素【LeetCode-1060】

题目来源

力扣

1060

题目描述

现有一个按 升序 排列的整数数组 nums ,其中每个数字都 互不相同

给你一个整数 k ,请你找出并返回从数组最左边开始的第 k 个缺失数字。

题目分析

1、根据当前元素下标Idx,当前元素值,数组首个元素值,可以确定此前缺失的元素个数:

[缺失元素个数] = [当前元素值] - [首个元素值] - [当前元素下标] (首个元素下标位0)

2、缺失元素的个数随检索位置下标递增,因此可以使用二分查找。

3、 应考虑特殊情况,当k值超过末尾前缺失元素个数时可以简化计算。

4、对应 leetcode 二分查找 讲义 模板II 因为除【3】中的情况外,需要通过考察最终目标的右侧元素的情况来确定 目标元素idx,终止条件为 left = right,此时idx为第一个缺失元素数量大于或等于目标数的,idx-1 处缺失元素个数小于目标数。

策略

1、可以构造辅助函数用于计算位置下标idx处前所确实的元素个数。

missing(int idx, int[] array) {... return count}

2、以 idx 0 为左边界,idx nums.size()-1 为右边界 开始进行

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值