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.

¿Hay alguna fuga en mi código? Solo 1 caso no está funcionando y no sé por qué.

Estoy tratando de escribir un programa para mover todos los ceros al final del arreglo y mantener el orden original de los otros elementos.

Aquí está mi código:

var moveZeros = function (arr) {
    // TODO: Program me
    var k=0;
    for (var i=0;i<=arr.length-1;i++){
        var s=arr[i];
        if (s===0){
            arr.splice(i,1);
            k++
        }
    }
    for (var j=0;j<=k-1;j++){
        arr.push(0);
    }
    return arr
}

Pero cuando los ceros están juntos como [1,0,0,1] no funciona.

No veo por qué.

¿Alguien puede decirme?

Y por favor también explique por qué k-1 no k. Escribí k-1 observando la salida.
Por favor, no me diga la respuesta al problema original, solo quiero solucionar el problema con mi código. 🙂

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con su código es que cuando elimina un elemento del array usando splice, los elementos que están después se desplazan hacia la izquierda y, cuando llega al segundo 0, el índice del tercer elemento es ahora el índice del segundo 0 y, por lo tanto, el bucle lo salta.

    Para solucionar esto, puede usar un bucle while en lugar de un bucle for y decrementar el índice cada vez que elimine un elemento. De esta manera, el índice de los elementos después del elemento eliminado permanecerá igual.

    Aquí está el código modificado:

    var moveZeros = function (arr) {
    
      // TODO: Program me
    
      var k=0;
      var i=0;
      while(i<=arr.length-1){
    
        var s=arr[i];
        if (s===0){
    
          arr.splice(i,1);
          k++
    
          } else {
            i++;
          }
      }
      for (var j=0;j<=k-1;j++){
        arr.push(0);
      }
    
      return arr
    
    }
    

    La razón por la que necesita usar k-1 es porque k es el número de ceros en el array y el método push agrega un elemento a la vez, por lo que debe recorrer el bucle k-1 veces para agregar todos los ceros.

Comments are closed.