力扣链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof
题目描述
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
思路:二分查找
对于题目描述的数组,如果arr[i]===i,说明0~i之间没有缺失数字,要找的数字出现在 i 以后。利用这一特性,我们可以使用二分法,根据mid的值是否与索引相等不断缩小查找的范围。
代码:
/** * @param {number[]} nums * @return {number} */ var missingNumber = function(nums) { if(!nums.length) return 0; if(nums.length === 1) return nums[0] ? 0 : 1; let start = 0, end = nums.length-1; while(start + 1 < end){ const mid = parseInt((start + end) / 2); if(nums[mid] === mid){ start = mid; }else{ end = mid; } } if(start !== nums[start]){ return start; } if(end !== nums[end]){ return end; } return end+1; };
原文:https://www.cnblogs.com/xintangchn/p/13232674.html