nowcoder NC101 缺失数字|刷题打卡

240 阅读1分钟

nowcoder NC101 缺失数字|刷题打卡

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

一、题目描述

NC101 缺失数字

从0,1,2,...,n这n+1个数中选择n个数,找出这n个数中缺失的那个数,要求O(n)尽可能小。

输入

[0,1,2,3,4,5,7]

输出

6

二、思路分析:

  1. 这题是有规律的。如果没有数字缺失,数组元素的值刚好和下标相等 a[i] = i
  2. 数字缺失会导致这种对应关系被打破。
  3. 所以第一个 a[i] != i 的位置上,i对应着缺失的数字。

三、AC 代码:

function solve( a ) {
    // write code here
    let i
    for( i =0;i<a.length;i++){
        if(a[i]!= i){
            return i
        }
    }
    return i
}
function solve( a ) {
    // write code here
    let left = 0, right = a.length
    while(left < right) {
        const mid = left + Math.floor((right - left) / 2)
        if (a[mid] === mid) {
            left = mid + 1
        } else if (a[mid] > mid) {
           right = mid
        }
    }
    return left
     
}

四、总结:

对于大数加法,如果只用数值类型进行运算,可能会超出数值类型可以表示的范围。 所以考虑用数组来进行每一位数字的运算,也就是模拟笔算加法的过程。