给定范围,在数组中查找缺失的数字

时间:2020-03-03 03:01:58

标签: javascript arrays

给出一个范围,如何在javascript中找到无序数组中缺少的数字?例如,如果我知道数组的范围是[48,79]且数组是:

[56, 76, 48, 69, 60, 68, 57, 58, 52,
  72, 61, 64, 65, 66, 73, 75, 77,
  49, 63, 50, 70, 51, 74, 54, 59,
  78, 79, 71, 55, 67]

缺少的数字/输出为62,53。

2 个答案:

答案 0 :(得分:2)

您应该尝试一下

function findNumbers(arr) {
    var sparse = arr.reduce((sparse, i) => (sparse[i]=1,sparse), []);
    return [...sparse.keys()].filter(i => i && !sparse[i]);
}

var myArr = [56, 76, 48, 69, 60, 68, 57, 58, 52,
  72, 61, 64, 65, 66, 73, 75, 77,
  49, 63, 50, 70, 51, 74, 54, 59,
  78, 79, 71, 55, 67]
var res= findNumbers(myArr );
console.log(res);

答案 1 :(得分:1)

编辑:在我发布此信息时,Vinay Kaklotar已经为OP更新问题发布了更好的解决方案。


我将进行迭代,直到找不到缺失值的索引:

var arr = [1,2,3,4,5,7,8,9,10];
var i = 1;

while(arr.indexOf(i) !== -1) {
  i++;
}

console.log(i);

以上是OP编辑之前原始问题的答案。以下是更新后的问题的解决方案。

我正在遍历数组,并将每个项目与新序列(n)进行比较。每次找到丢失的数字,都会将其添加到丢失的数组中。

var arr = [1, 2, 4, 5, 6, 9];
var missing = [];
var n = 1;

for (var i = 0; i < arr.length; i++) {
  if (arr[i] !== n) {
    missing.push(n);
    i--;
  }
  n++;
}

console.log(missing);