function solution(statues) { statues.sort() let fullArray = []; let missingStatues = []; for (let i = Math.min(...statues); i <= Math.max(...statues); i++) { fullArray.push(i); } for (let i = 0; i < fullArray.length; i++) { if (!(fullArray[i] in statues)) { missingStatues.push(fullArray[i]); } } let missingStatuesCount = missingStatues.length; return missingStatues; } console.log(solution([6, 2, 3, 8]))Esperaba [4, 5, 7] pero obtuve [4, 5, 6, 7, 8]. El ciclo que inserta fullArray[i] en las estatuas que faltan, también está insertando [6] y [8], que están en las estatuas y no deben insertarse.
function solution(statues) { statues.sort() Las comparaciones predeterminadas realizadas por el método .sort() son comparaciones de cadenas . Aparentemente, sus matrices contienen números, por lo que necesita una función de comparación numérica:
statues.sort((a, b) => a - b);Después:
for (let i=Math.min(...statues);i<=Math.max(...statues);i++) { fullArray.push(i); } Una vez que haya ordenado con éxito la matriz, statues[0] será el valor más pequeño y statues[statues.length - 1] será el más grande. No es necesario copiar la matriz y llamar a Math.min() o Math.max() .
for (let i=0;i<fullArray.length;i++) { if (!(fullArray[i] in statues)) { missingStatues.push(fullArray[i]); } } El operador in es para verificar claves de objetos, no valores. Lo que estás buscando es el método .includes() :
if (!statues.includes(fullArray[i]))