题目来源
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 为右边界 开始进行