Javascript 从1..N项数组中查找缺少的项
我被要求从Javascript 从1..N项数组中查找缺少的项,javascript,ecmascript-6,Javascript,Ecmascript 6,我被要求从1..N数组中查找缺少的数字 例如,对于数组:让numar=[2,4,6,8,3,5,1,9,10]缺少的号码是7 let numArr=[2,4,6,8,3,5,1,9,10]; numArr.sort(function(a,b){ //sort numArr return a-b; }); let newNumArr=[]; for(let i=1;i<=10;i++){ newNumArr.push(i); } for(let i=0;i<newNumA
1..N
数组中查找缺少的数字
例如,对于数组:让numar=[2,4,6,8,3,5,1,9,10]代码>缺少的号码是7
let numArr=[2,4,6,8,3,5,1,9,10];
numArr.sort(function(a,b){ //sort numArr
return a-b;
});
let newNumArr=[];
for(let i=1;i<=10;i++){
newNumArr.push(i);
}
for(let i=0;i<newNumArr.length;i++){ //compare with new arr
if(newNumArr[i] !== numArr[i]){
console.log('The missing num is:'+newNumArr[i]); //The missing num is:7
break;
}
}
let numArr=[2,4,6,8,3,5,1,9,10];
sort(函数(a,b){//sort numar
返回a-b;
});
设newNumArr=[];
对于(设i=1;i使用。查找:
函数查找管理(输入){
输入.排序((a,b)=>a-b);
const first=输入[0];
返回input.find((num,i)=>first+i!==num)-1;
}
log(findMissing([2,4,6,8,3,5,1,9,10]);
console.log(findMissing([3,4,5,6,8,9,2]);
您可以使用连续的n
数之和的简单逻辑是n*(n+1)/2
。从上面减去数组数之和将得到缺少的数
let numArr=[2,4,6,8,3,5,1,9,10];
var sum=numArr.reduce((a,c)=>a+c,0);
//由于数组包含n-1个数字,这里n将是numar.length+1
console.log(((numar.length+1)*(numar.length+2))/2-sum);
您可以使用MAP
和FILTER
查找单独数组中缺少的数字
const numArr = [2, 4, 6, 8, 3, 5, 1, 9, 10];
const missingNumberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(number => {
if (!numArr.includes(number)) {
return number;
}
}).filter(y => y !== undefined);
您可以使用XOR
功能
XOR
所有数组元素,让XOR的结果为arr\u XOR
XOR
所有从1到n的数字,设XOR为interval\uxor
arr\u XOR
的XOR
和interval\u XOR
给出缺少的数字
let numArr=[2,4,6,8,3,5,1,9,10];
函数getMissingNo(arr){
arr=arr.sort()
n=arr.length
arr_xor=arr[0]
区间xor=1
对于(i=0;i 对于(i=0;i最适合codereview。此外,从您提出的问题来看,除非您这样说,否则不清楚7是否为缺失的数字。请尝试重新编写它以适合您编写的代码。这是错误的,因为它不会显示是否缺失了1或10。它排除了缺失的范围边缘。您能解释第三个l吗ine?@user8544通过保存对数组中第一个元素的引用,迭代数组并检查元素编号是否等于(数组索引+第一个),将通知您是否已找到缺少的元素。