nowcoder NC101 缺失数字|刷题打卡
本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一、题目描述
从0,1,2,...,n这n+1个数中选择n个数,找出这n个数中缺失的那个数,要求O(n)尽可能小。
输入
[0,1,2,3,4,5,7]
输出
6
二、思路分析:
- 这题是有规律的。如果没有数字缺失,数组元素的值刚好和下标相等 a[i] = i
- 数字缺失会导致这种对应关系被打破。
- 所以第一个 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
}
四、总结:
对于大数加法,如果只用数值类型进行运算,可能会超出数值类型可以表示的范围。 所以考虑用数组来进行每一位数字的运算,也就是模拟笔算加法的过程。