J'essaie de trouver un moyen facile de boucler (itérer) sur un tableau pour trouver tous les nombres manquants dans une séquence, le tableau ressemblera un peu à celui ci-dessous.
var numArray = [0189459, 0189460, 0189461, 0189463, 0189465];
Pour le tableau ci-dessus, il faudrait que 0189462
et 0189464
soient déconnectés.
UPDATE: c'est la solution exacte que j'ai utilisée dans la réponse de Soufiane.
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]
METTRE &AGRAVE; JOUR
Voici une version plus propre utilisant .reduce
var numArray = [0189459, 0189460, 0189461, 0189463, 0189466];
var mia = numArray.reduce(function(acc, cur, ind, arr) {
var diff = cur - arr[ind-1];
if (diff > 1) {
var i = 1;
while (i < diff) {
acc.Push(arr[ind-1]+i);
i++;
}
}
return acc;
}, []);
console.log(mia);
Si vous savez que les nombres sont triés et croissants:
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
}
}
Regardez vos zéros au début, ils seront supprimés lorsque le tableau sera interprété.
var A = [0189459, 0189460, 0189461, 0189463, 0189465]
(A retourne [189459,189460,189461,189463,189465])
function absent(arr){
var mia= [], min= Math.min.apply('',arr), max= Math.max.apply('',arr);
while(min<max){
if(arr.indexOf(++min)== -1) mia.Push(min);
}
return mia;
}
var A = [0189459, 0189460, 0189461, 0189463, 0189465]; alerte (absent (A))
/ * valeur renvoyée: (Array) 189462,189464 * /
Pour trouver un numéro manquant dans une séquence, nous devons d’abord trier un tableau. Ensuite, nous pouvons identifier quel numéro est manquant. Je fournis ici le code complet avec quelques scénarios de test. Ce code identifie uniquement le nombre positif manquant. Si vous transmettez des valeurs négatives, il donne un nombre positif.
function findMissingNumber(inputAr) {
// Sort array
sortArray(inputAr);
// finding missing number here
var result = 0;
if (inputAr[0] > 1 || inputAr[inputAr.length - 1] < 1) {
result = 1;
} else {
for (var i = 0; i < inputAr.length; i++) {
if ((inputAr[i + 1] - inputAr[i]) > 1) {
result = inputAr[i] + 1;
}
}
}
if (!result) {
result = inputAr[inputAr.length - 1] + 1;
}
return result;
}
function sortArray(inputAr) {
var temp;
for (var i = 0; i < inputAr.length; i++) {
for (var j = i + 1; j < inputAr.length; j++) {
if (inputAr[j] < inputAr[i]) {
temp = inputAr[j];
inputAr[j] = inputAr[i];
inputAr[i] = temp;
}
}
}
}
console.log(findMissingNumber([1, 3, 6, 4, 1, 2]));
console.log(findMissingNumber([1, 2, 3]));
console.log(findMissingNumber([85]));
console.log(findMissingNumber([86, 85]));
console.log(findMissingNumber([0, 1000]));
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]))
Il serait assez simple de trier le tableau:
numArray.sort();
Ensuite, en fonction de ce qui vous a le plus facilité:
J'utilise une fonction récursive pour cela.
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;
}
Ce n’est pas la meilleure idée si vous examinez un grand nombre de chiffres. AVERTISSEMENT FAIR: les fonctions récursives utilisent beaucoup de ressources (pointeurs et autres) et peuvent vous donner des résultats inattendus si vous travaillez avec des nombres énormes. Vous pouvez voir le jsfiddle . Cela suppose également que vous avez trié le tableau.
En gros, vous transmettez à la fonction "findMissing ()" le tableau que vous voulez utiliser, le nombre de départ et le nombre d'arrêt, et vous le laissez partir de là.
Alors:
var missingArr = findMissing(sequenceArr, 1, 10);
S'il vous plaît vérifier le code ci-dessous .....
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;
}