Сравнение чисел в массиве
В массиве идут числа от 0 до бесконечности. Я проверяю массив на это соответствие. Если получится, что элемент массива больше чем хотя бы на 1 от предыдущего, то предыдущем я должен добавить 1. У меня все условия проходит, кроме одного. Что хотели получить 4, а получили 5. Вот мой код, что в нем подкорректировать:
console.log(nextId([0,1,2,3,5])); //4
console.log(nextId([0,1,2,3,4,5,6,7,8,9,10])); //11
console.log(nextId([0,1,2,3,4,5, 7,8, 10])); //6
console.log(nextId([1,2,3,4,5, 7,8, 10])); //0
console.log(nextId([0, 0, 2, 3, 3, 3, 5])); //1
console.log(nextId([0, 1, 2, 4, 5])); //3
function nextId(ids){
function compareNum(a, b) {
return a - b;
}
ids.sort(compareNum);
let num = ids.length;
for(let i = 0; i < ids.length; i++) {
if(ids[0] != 0) {
num = 0;
} else if ((ids[i + 1] - ids[i]) >= 2){
num = ids[i] + 1;
break;
}
}
return num;
}
Ответы (1 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
Только в одном случае вместо 4 выводится 5
Во: [0,1,2,3,3], это из-за того, что цикл идет до ids.length
И на последней итерации ids[i + 1] возвращает undefined, получается if (NaN >= 2)
console.log(nextId([0,1,2,3,3]));
console.log(nextId([0,1,2,3,5])); //4
console.log(nextId([0,1,2,3,4,5,6,7,8,9,10])); //11
console.log(nextId([0,1,2,3,4,5, 7,8, 10])); //6
console.log(nextId([1,2,3,4,5, 7,8, 10])); //0
console.log(nextId([0, 0, 2, 3, 3, 3, 5])); //1
console.log(nextId([0, 1, 2, 4, 5])); //3
function nextId(ids){
ids.sort((a,b) => a - b);
if (ids[0] != 0) return 0;
for(let i = 0; i < ids.length - 1; i++) {
if (ids[i + 1] - ids[i] >= 2) return ids[i] + 1;
}
return ids[ ids.length - 1 ] + 1;
}