一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
思路:
使用二分查找,可以看到,在缺失元素之前,数组下标等于数组值,在缺失元素之后数组下标不等于数组值。
因此,如果数组下标与数组值相同,则收缩左边界。
如果数组下标与数组值不等,则收缩右边界
class Solution {
public:
int missingNumber(vector<int>& nums) {
int left=0;
int right=nums.size();
while(left<right){
int mid = left+(right-left)/2;
if(nums[mid]==mid){
left = mid+1;
}else{
right = mid;
}
}
return left;
}
};
这篇博客介绍了一种利用二分查找算法解决数组中缺失数字的问题。给定一个长度为n-1的递增排序数组,数组内数字在0到n-1范围内且唯一,有一个数字不在数组中,通过比较数组下标与值,可以找到这个缺失的数字。当数组下标等于数组值时收缩左边界,否则收缩右边界,最终找到缺失的数字。
280

被折叠的 条评论
为什么被折叠?



