Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

98
Vistas
Volver a sintonizar una tupla de índices de dos elementos en una matriz que se suman a un valor objetivo

Mi tarea es escribir una función que tome una matriz de números y un número objetivo

Debo encontrar dos números en la matriz que se suman para formar el objetivo y luego devolver los índices de los dos números como un grupo irregular, así (índice1, índice2).

Creé un bucle for anidado para comparar cada elemento de la matriz entre sí, y luego ejecuté una declaración if para devolver los índices cuando se alcanzó el valor objetivo.

Sin embargo, algo no funciona. No estoy seguro de cómo regresar como un grupo irregular o quizás mi código para obtener los índices es incorrecto. Cualquier ayuda o sugerencia sería muy apreciada. Gracias

 function twoSum(numbers, target) { for (let i = 0; i < numbers.length; i++) { for (let j = 0; j < numbers.length; j++) { if (numbers[i] + numbers[j] === target) { return [numbers.indexOf(i), numbers.indexOf(j)]; } } } }

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Array#indexOf() devuelve la posición del valor pasado al método. Entonces [1,2,3].indexOf(2) devolvería 1 . [numbers.indexOf(i), numbers.indexOf(j)] le dará la posición del valor actual de sus variables de contador i y j en la matriz. Si el valor no está en la matriz, digamos [1,2,3].indexOf(0) , el método devolverá -1 .

Los índices que desea devolver son solo i y j .

 function twoSum(numbers, target) { for (let i = 0; i < numbers.length; i++) { for (let j = 0; j < numbers.length; j++) { if (numbers[i] + numbers[j] === target) { return [i, j]; } } } } console.log(twoSum([1,2,3,4],5)) // 1+4 = 5 => [0,3] console.log(twoSum([1,2,3,4],9)) // undefined since there is no solution

about 4 years ago · Juan Pablo Isaza Denunciar

0

Cuando se aplica la corrección [i, j] , este algoritmo funcionará. Pero es muy ineficiente. En particular, cuando no hay solución, intenta pares L² .

Ahora, suponga que la matriz se ordena cada vez más. Establezca i=0 y encuentre el j más pequeño, escaneando de derecha a izquierda, tal que n[i] + n[j] ≥ target . A continuación, incremente i y ajuste j para que sea nuevamente el más pequeño tal que n[i] + n[j] ≥ target . Y así sucesivamente, hasta que i y j se crucen o se logre la igualdad exacta. Ahora bien, el número de pares es de orden L únicamente, un ahorro bastante significativo. El costo de la ordenación es proporcional a L.log(L) .

Entonces, una estrategia es ordenar la matriz y buscar un par de valores coincidentes como se indicó anteriormente. Para obtener los índices (en la matriz inicial), puede conservar una copia y usar indexof . Otra opción es aumentar la matriz agregando su índice a cada elemento y moverlos juntos durante la ordenación.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda