题目描述

剑指Offer——II.0~n-1中缺失的数字(JS实现)_二分查找

解题思路

  • 本题采用的二分的思想
  • 本题关键是使用二分查找找出中位数的下标和元素值的关系

解题代码

var missingNumber = function(nums) {
    // !本题采用二分法的思想
    // 定义左指针
    let left = 0;
    // 定义右指针
    let right = nums.length - 1;
    if (nums[right] !== nums.length) return nums.length;
    if (nums[0] !== 0) return 0;
    // 进入循环
    while (left < right) {
        // 找出中位数的下标
        let mid = Math.floor((left + right) / 2);
        if (nums[mid] === mid) {
            // 如果中位数下标和元素值相同,说明缺失的值在中位数右边
            // 让左指针移动到中位数右边
            left = mid + 1
        } else if (nums[mid] > mid) {
            // 说明缺失的在中位数的左边
            right = mid;
        } 
    }
    return left;
};

总结(本题给我们的启示思路)

  • 启示一:学会使用二分查找