Jos*_*ose 2 javascript arrays algorithm
我正在研究一个算法问题(在 leetcode 上),该问题要求以下内容:
给定一个包含n不同数字的数组0, 1, 2, ..., n,,查找数组中缺少的数字。
例如,给定nums = [0, 1, 3]return 2。
我目前的答案是:
var missingNumber = function(nums) {
return nums.filter(function(item, index, arr) {
return arr[index] - arr[index - 1] > 1;
}).shift() - 1;
};
Run Code Online (Sandbox Code Playgroud)
然而,leetcode 正在使用这两个测试用例(以及其他一些),这对我来说没有意义:
输入:[0]
预期:1
输入:[0, 1]
预期:2
编辑:还有...
输入:[1]
预期:0
据我了解,该算法要求返回数组中缺少的单个数字,因为首先存在一个实际上丢失的数字。我在这里遗漏了一些东西还是这个算法的说明非常不清楚?
有一种不同的方法可以使用 XOR 运算来完成此操作。这里的想法是,一个数字与自身进行异或后将始终为 0。我们可以将 0 到 N 的所有数字的异或存储在变量中xor1,并将数组中所有数字的异或存储在变量中xor2。和的异xor1或xor2将是缺失的数字,因为它只会出现在xor1和 中xor2。
function foo(arr){
var n = arr.length;
var xor1 = 0, xor2 = 0;
for(var i = 0;i <= n;i++)
xor1 ^= i;
for(var i = 0;i < n;i++)
xor2 ^= arr[i];
return xor1 ^ xor2;
}
Run Code Online (Sandbox Code Playgroud)