如何找出1到N的数组中缺失的数字?附示例与实现代码
找出1..N数组中缺失数字的实现方案
如果需要从1到N的数组里找出缺失的那个数字,用排序对比的方法就很直观,逻辑简单也好理解。比如给定示例数组:let numArr = [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){ return a-b; }); // 生成包含1到10的完整序列,作为参照标准 let newNumArr = []; for(let i=1;i<=10;i++){ newNumArr.push(i); } // 逐个对比两个数组,找到第一个不匹配的元素就是缺失值 for(let i=0;i<newNumArr.length;i++){ if(newNumArr[i] !== numArr[i]){ console.log('The missing num is:'+newNumArr[i]); // 输出结果:The missing num is:7 break; } }
步骤拆解:
- 排序原数组:这里要注意给
sort传入a-b的比较函数,因为默认的排序是按字符串规则来的,会导致数字排序出错,升序排序后原数组就接近完整序列的结构了。 - 生成完整序列:创建一个包含1到目标最大值(这里是10)的数组,作为我们的“完美参照组”。
- 对比找差异:遍历两个数组的对应位置,第一个不相等的位置,
newNumArr里的元素就是原数组缺失的数字,找到后及时终止循环还能提升效率。
内容的提问来源于stack exchange,提问作者Dangur
相关产品推荐
相关产品推荐

