看到递增排序用二分法。
题目要求
思路分析
- 如果数组中不存在缺失数字,则数组最后一位的下标和值对等;
- 如果数组中存在缺失数字,从数组某一位开始,之后的所有元素跟下标不对等;
- 所以找到第一个下标跟值不对的等的即可;
二分法解法
var missingNumber = function(nums) {
if(nums[nums.length-1] == nums.length -1){
return nums.length
}
let low = 0;
let high = nums.length - 1;
while(low < high){
let mid = Math.floor((low + high) / 2);
if(nums[mid] == mid){
low = mid + 1;
}else{
//nums[mid] !== mid,说明有问题的值在左半部分
high = mid;
}
}
return high;
};
典型的数组遍历解法
var missingNumber = function(nums) {
for(let i = 0;i < nums.length;i++){
if(nums[i] !== i){ //下标和对应值不相等
return i
}
}
return nums.length
};