Javascript 数组-查找序列中缺少的数字
我试图找到一种简单的方法来循环(迭代)数组,以查找序列中所有缺失的数字,该数组看起来有点像下面的数组Javascript 数组-查找序列中缺少的数字,javascript,arrays,loops,sequence,Javascript,Arrays,Loops,Sequence,我试图找到一种简单的方法来循环(迭代)数组,以查找序列中所有缺失的数字,该数组看起来有点像下面的数组 var numArray=[0189459、0189460、0189461、0189463、0189465] 对于上面的阵列,我需要注销0189462和0189464 更新:这正是我从苏菲亚尼的答案中使用的解决方案 var numArray = [0189459, 0189460, 0189461, 0189463, 0189465]; var mia= []; for(var i =
var numArray=[0189459、0189460、0189461、0189463、0189465]代码>
对于上面的阵列,我需要注销0189462
和0189464
更新:这正是我从苏菲亚尼的答案中使用的解决方案
var numArray = [0189459, 0189460, 0189461, 0189463, 0189465];
var mia= [];
for(var i = 1; i < numArray.length; i++)
{
if(numArray[i] - numArray[i-1] != 1)
{
var x = numArray[i] - numArray[i-1];
var j = 1;
while (j<x)
{
mia.push(numArray[i-1]+j);
j++;
}
}
}
alert(mia) // returns [0189462, 0189464]
var numArray=[0189459、0189460、0189461、0189463、0189465];
var mia=[];
对于(变量i=1;i 而(j如果您知道这些数字是按顺序排列并递增的:
for(var i = 1; i < numArray.length; i++) {
if(numArray[i] - numArray[i-1] != 1) {
//Not consecutive sequence, here you can break or do whatever you want
}
}
for(变量i=1;i
对数组进行排序非常简单:
numArray.sort();
然后,根据对您来说最简单的方式:
您可以遍历数组,捕捉序列模式并在运行时检查它们
您可以将数组拆分为多个序列号数组,然后检查每个单独的数组
您可以将排序后的数组简化为一个成对数组,其中每对都是一个开始和结束序列,然后将这些序列的开始/结束与其他数据进行比较
注意前导零,它们将在解释数组时删除-
变量A=[0189459、0189460、0189461、0189463、0189465]
(A返回[189459189460189461189463189465])
功能缺失(arr){
var mia=[],min=Math.min.apply(“”,arr),max=Math.max.apply(“”,arr);
而(min我对此使用递归函数
function findMissing(arr, start, stop) {
var current = start,
next = stop,
collector = new Array();
function parseMissing(a, key) {
if(key+1 == a.length) return;
current = a[key];
next = a[key + 1];
if(next - current !== 1) {
collector.push(current + 1);
// insert current+1 at key+1
a = a.slice( 0, key+1 ).concat( current+1 ).concat( a.slice( key +1 ) );
return parseMissing(a, key+1);
}
return parseMissing(a, key+1);
}
parseMissing(arr, 0);
return collector;
}
如果您正在查看一组庞大的数字,这不是最好的主意。警告:递归函数是资源密集型的(指针和其他),如果您使用庞大的数字,这可能会给您带来意外的结果。您可以看到。这还假设您已对数组进行排序
基本上,将“findMissing()”函数传递给要使用的数组、起始编号和停止编号,然后让它从那里开始
因此:
这里是@Mark Walters的一个变体,它增加了为序列指定下边界的功能,例如,如果您知道序列应该始终从0189455
开始,或者像1
这样的其他数字开始
还可以调整此代码以检查上边界,但目前只能查找下边界
//我们的第一个示例数组。
var numArray=[0189459、0189460、0189461、0189463、0189465];
//对于该阵列,下二进制将为0189455
var numArrayLowerBoundary=0189455;
//我们的第二个示例数组。
var simpleArray=[3,5,6,7,8,10,11,13];
//对于该阵列,下边界为1
var simpleArrayLowerBoundary=1;
//构建一个html字符串,这样我们就可以在div中很好地显示结果
var html=“numArray=[0189459、0189460、0189461、0189463、0189465]
”
html+=“其小写字母为\“0189455\”
“
html+=“numArray中缺少以下数字:
”
html+=FindAdministringNumber(numArray,numArrayLowerBoundary);
html+=“
”
html+=“simpleArray=[3,5,6,7,8,10,11,13]
”
html+=“其小写字母为\“1\”
“
html+=“simpleArray中缺少以下数字:
”
html+=findmisingnumbers(simpleArray,simpleArrayLowerBoundary);
//在div中显示结果
document.getElementById(“log”).innerHTML=html;
//这是用于查找缺失数字的函数!
//如果您只需要函数,而不需要演示代码,请复制/粘贴此文件。
函数findMissingNumbers(arrSequence,lowerBoundary){
var mia=[];
对于(变量i=0;i
要在序列中查找缺失的数字,首先,我们需要对数组进行排序。然后,我们可以确定缺失的数字。我在这里提供了一些测试场景的完整代码。如果传递负值,则此代码将只识别缺失的正数,即使它给出了正数
函数findmisingnumber(输入){
//排序数组
sortArray(输入);
//在这里找到丢失的号码
var结果=0;
if(inputAr[0]>1 | | inputAr[inputAr.length-1]<1){
结果=1;
}否则{
对于(变量i=0;i1){
结果=输入[i]+1;
}
}
}
如果(!结果){
function findMissing(arr, start, stop) {
var current = start,
next = stop,
collector = new Array();
function parseMissing(a, key) {
if(key+1 == a.length) return;
current = a[key];
next = a[key + 1];
if(next - current !== 1) {
collector.push(current + 1);
// insert current+1 at key+1
a = a.slice( 0, key+1 ).concat( current+1 ).concat( a.slice( key +1 ) );
return parseMissing(a, key+1);
}
return parseMissing(a, key+1);
}
parseMissing(arr, 0);
return collector;
}
var missingArr = findMissing(sequenceArr, 1, 10);
function missingNum(nums){
const numberArray = nums.sort((num1, num2)=>{
return num1 - num2;
});
for (let i=0; i < numberArray.length; i++){
if(i !== numberArray[i]){
return i;
}
}
}
console.log(missingNum([0,3,5,8,4,6,1,9,7]))
function solution(A) {
var max = Math.max.apply(Math, A);
if(A.indexOf(1)<0) return 1;
var t = (max*(max+1)/2) - A.reduce(function(a,b){return a+b});
return t>0?t:max+1;
}
var arr = [0189459, 0189460, 0189461, 0189463, 0189465];
var [min,max] = [Math.min(...arr), Math.max(...arr)];
var out = Array.from(Array(max-min),(v,i)=>i+min).filter(i=>!arr.includes(i));
const findMissing = (arr) => {
const min = Math.min(...arr);
const max = Math.max(...arr);
// add missing numbers in the array
let newArr = Array.from(Array(max-min), (v, i) => {
return i + min
});
// compare the full array with the old missing array
let filter = newArr.filter(i => {
return !arr.includes(i)
})
return filter;
};
const findMissing = (numarr) => {
for(let i = 1; i <= numarr.length; i++) {
if(i - numarr[i-1] !== 0) {
console.log('found it', i)
break;
} else if(i === numarr.length) console.log('found it', numarr.length + 1)
}
};
console.log(findMissing([1,2,3,4,5,6,7,8,9,10,11,12,13,14]))
let numberArray = [];
for (let i = 1; i <= 100; i++) {
numberArray.push(i);
}
let deletedArray = numberArray.splice(30, 1);
let sortedArray = numberArray.sort((a, b) => a - b);
let array = sortedArray;
function findMissingNumber(arr, sizeOfArray) {
total = (sizeOfArray * (sizeOfArray + 1)) / 2;
console.log(total);
for (i = 0; i < arr.length; i++) {
total -= arr[i];
}
return total;
}
console.log(findMissingNumber(array, 100));
// Find the missing number
let numArray = [0189459, 0189460, 0189461, 0189463, 0189468];
let numLen = numArray.length;
let actLen = Number(numArray[numLen-1])-Number(numArray[0]);
let allNumber = [];
for(let i=0; i<=actLen; i++){
allNumber.push(Number(numArray[0])+i);
}
[...allNumber].forEach(ele=>{
if(!numArray.includes(ele)){
console.log('Missing Number -> '+ele);
}
})
const arr = [1,2,3,5,6,7,8,9];
return arr.find((x,i) => arr[i+1]-x > 1) + 1
//4