首页 > 其他 > 详细

剑指Offer 53II - 0~n-1中缺失的数字

时间:2020-07-03 23:13:12      阅读:65      评论:0      收藏:0      [点我收藏+]

力扣链接: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;
};

 

剑指Offer 53II - 0~n-1中缺失的数字

原文:https://www.cnblogs.com/xintangchn/p/13232674.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!