从数组中返回缺失的数字(算法)

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

据我了解,该算法要求返回数组中缺少的单个数字,因为首先存在一个实际上丢失的数字。我在这里遗漏了一些东西还是这个算法的说明非常不清楚?

Ved*_*hta 5

有一种不同的方法可以使用 XOR 运算来完成此操作。这里的想法是,一个数字与自身进行异或后将始终为 0。我们可以将 0 到 N 的所有数字的异或存储在变量中xor1,并将数组中所有数字的异或存储在变量中xor2。和的异xor1xor2将是缺失的数字,因为它只会出现在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)