剑指offer_53_0~n-1中缺失的数字II【javascript】

70 阅读1分钟

题目链接

leetcode.cn/problems/qu…

题目 【简单】

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围 0 - n-1 之内。在范围 0 - n-1 内的n个数字有且只有一个数字不在该数组中,请找出这个数字。

示例

示例 1:
输入: nums = [0,1,2,3,5]
输出: 4

示例 2:
输入: nums = [0, 1, 2, 3, 4, 5, 6, 8]
输出: 7

题解

二分查找

  • 时间复杂度 O(log⁡N): 二分法为对数级别复杂度。
  • 空间复杂度 O(1): 几个变量使用常数大小的额外空间。
/**
 * @param {number[]} nums
 * @return {number}
 */
var takeAttendance = function(nums) {
    let i = 0, j = nums.length - 1;
    while(i <= j) {
        let m = Math.floor((i + j) / 2);
        if(nums[m] == m) i = m + 1;
        else j = m - 1;
    }
    return i;
};