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)]; } } } }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 solutionCuando 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.