-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathmissingNumber.js
39 lines (34 loc) · 1.17 KB
/
missingNumber.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//方法一
//感觉这种题,自己做完之后应该去看看其他大佬得想法。
function missingNumber(nums){
var sum = nums.reduce(function(pre, cur, index, array){
return pre + cur;
}),
sumArray = ((nums.length * (nums.length + 1)) / 2);
return sumArray - sum;
}
console.log(missingNumber([0,1,3,4]));
//方法二。
//同样是用了线性时间,不过这里等于遍历了两遍,所以时间会有一些慢。
var missingNumber2 = function(nums) {
var hash = [];
nums.forEach(function(item) {
hash[item] = true;
});
for (var i = 0; ; i++)
if (!hash[i])
return i;
};
//方法三,这是一个好想法啊,
//利用xor操作能够两个清零,所以再来一个0-n的数组就可以直接放回这样一个数字。直接用python写方便一点
/*
def missingNumber(self, nums):
return reduce(lambda x, y: x xor y, nums + list(range(len(n) + 1));
*/
function missingNumber3(nums){
var result = nums.length;//这一步一定要有,因为必须有0-nums,length之间全部的数字。
for(var i = 0; i < nums.length; i++){
result = i ^ nums[i];
}
return result;
}