es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Devolviendo Null – ¿por qué está fallando esto?

Estoy obteniendo null con este código, sin embargo, no puedo ver por qué o dónde está fallando. (Puede deberse a la función de ordenamiento, ya que obtuve esto de un fragmento de código muy votado sobre cómo ordenar un array). Me importa más el entendimiento que la respuesta correcta.

Tarea que estoy tratando de lograr:

Ratiorg recibió estatuas de diferentes tamaños como regalo de CodeMaster por su cumpleaños, cada estatua tiene un tamaño entero no negativo. Como le gusta hacer las cosas perfectas, él quiere ordenarlas de más pequeña a más grande para que cada estatua sea más grande que la anterior exactamente por 1. Puede que necesite algunas estatuas adicionales para lograrlo. Ayúdalo a determinar la cantidad mínima de estatuas adicionales necesarias.

Ejemplo:

Para statues = [6, 2, 3, 8], la salida debería ser solution(statues) = 3

Ratiorg necesita estatuas de tamaños 4, 5 y 7.

Mi código y pensamiento:

function solution(statues) {

  let total = 0;

  statues.sort(function(a, b) { //Por lo que entiendo, esto debería ordenar el array numéricamente
    return a - b;
  });

  for (let i = 1; i < statues.length; i++) { //iterar a través del array comparando el índice con el anterior
    if (statues[i + 1] != (statues[i] + 1)) { //si hay una diferencia de más de 1 entre los índices, agregará la diferencia
      total += statues[i + 1] - statues[i]; //a la variable total
    }
  }
  return total;

}

const result = solution([6, 2, 3, 8]);
console.log(result);
Tags:  ,

Answer

  1. Avatar for davy.ai

    Una posible razón para el valor de retorno null es que la comparación en el bucle for está verificando si statues[i+1] != (statues[i]+1), pero como el bucle solo llega hasta statues.length-1, statues[i+1] será indefinido cuando i esté en el último índice, haciendo que la comparación sea falsa y no se agregue nada a total.

    Para solucionar esto, podemos modificar el bucle for para que vaya hasta statues.length-2 en su lugar:

    for (let i = 0; i < statues.length-1; i++) {
      if (statues[i+1] != (statues[i]+1)) {
        total += statues[i+1] - statues[i] - 1;
      }
    }
    

    Adicionalmente, la línea total += ... debería restar 1 para obtener el número de estatuas adicionales necesarias, no solo la diferencia entre los dos tamaños.

Comments are closed.