给出一个范围,如何在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。
答案 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);