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.

Comprobando duplicados dentro de un arreglo.

Estoy tratando de verificar instancias coincidentes de matrices dentro de una matriz más grande. Para hacer esto, estoy implementando una condición en la que si dos de tres números en una matriz coinciden con dos de los tres miembros de cualquiera de las matrices dentro de una matriz más grande, hay una declaración de “continue” para volver a un bucle anterior:

var threeSum = function (nums) {
  let result = [];
  for (let i = 0; i < nums.length - 2; i++) {
    for (let j = i + 1; j < nums.length - 1; j++) {
      loop1: for (let k = j + 1; k < nums.length; k++) {
        if (nums[i] + nums[j] + nums[k] === 0) {
          let smallArray = [nums[i], nums[j], nums[k]].sort((a, b) => a - b);
          for (let l = 0; l < smallArray.length && result[l]; l++) {
            if (
              smallArray[0] == result[l][0] &&
              smallArray[1] == result[l][2]
            ) {
              console.log("ya tenemos esta matriz")
              continue loop1;
            }
          }
          result.push(smallArray);
        }
      }
    }
  }
  return result;
};

Por lo tanto, para ejemplo threeSum([-1, 0, 1, 2, -1, -4]) debería devolver [[ - 1, 0, 1], [-1, -1, 2]] cuando en su lugar está devolviendo [[ -1, 0, 1], [-1, -1, 2], [-1, 0, 1]]. He verificado usando console.log en la condición más interna, y la declaración if nunca se evalúa como verdadera, por lo que nunca se ejecuta el comando continue. Pero la primera y la tercera matrices deberían cumplir con los requisitos, por lo que parece que al verificar la tercera matriz, la función debería regresar al comando anterior.

Estoy un poco confundido sobre qué está saliendo mal.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en JavaScript, arrays, bucles y declaraciones continue, puede haber un par de cosas que podrían estar causando el problema en tu código.

    En primer lugar, en el bucle interno donde estás verificando instancias coincidentes de arrays dentro de un array más grande, estás usando el operador lógico AND && en tu declaración if, lo cual significa que si la primera condición no se cumple, la segunda condición no se verificará. Esto podría significar que algunos de los arrays que cumplen los requisitos podrían pasarse por alto.

    Para solucionar esto, debes considerar usar el operador OR || en lugar del operador AND && en la declaración if.

    En segundo lugar, estás usando el array result como una bandera para verificar arrays coincidentes. Esto significa que si un array ya está en el array result, se omitirá en las verificaciones futuras, incluso si cumple con los requisitos. Esto podría estar causando que algunos de los arrays se pasen por alto.

    Para solucionar esto, podrías considerar usar un array de bandera separado para hacer un seguimiento de los arrays que ya se han agregado al array result.

    Estos cambios podrían solucionar potencialmente el problema en tu código.

Comments are closed.