Estoy tratando de encontrar una solución eficiente para la función de dos sumas en leetCode. Por lo que entiendo, este código DEBERÍA funcionar, pero sigue volviendo indefinido
var twoSum = function(nums, target) { let hashGraph = {} let slow = 0 let fast = nums.length - 1 while(slow < Math.abs(nums.length / 2)) { if(nums[slow] + nums[fast] == target) { return [slow, fast] } else if(!hashGraph[target - nums[slow]] === undefined) { let answer = [slow, hashGraph[target - nums[slow]]].sort() return answer } else if(!hashGraph[target - nums[fast]] === undefined) { return [hashGraph[target - nums[fast]], fast].sort() } else { hashGraph[nums[slow]] = slow hashGraph[nums[fast]] = fast slow++ fast-- } } };esencialmente estoy almacenando los valores en cada índice dentro de un gráfico hash y asignando los valores en esa ubicación al índice en el que se encontró el número. Cuando itero, verifico si el complemento para el número en el índice actual existe en la tabla hash. Si es así, devuelvo el índice actual y el valor del índice encontrado (que es el valor en la matriz en la que se descubrió el número)
Para el primer caso de prueba, se me da la matriz [2,7,11,15] y un objetivo de 9. Lo que DEBERÍA suceder aquí es que el caso else del bucle while sea alcanzado y el gráfico se complete de la siguiente manera: { 2: 0, 15: 3}
Luego, en la segunda iteración, se cumple la segunda condición donde se verifica si hashGraph[target - nums[slow]] es válido. Dado el objetivo de 9 y la entrada de 7, básicamente estoy preguntando si existe hashGraph[9-2] o hashGraph[2]. De hecho, lo hace, sin embargo, al visualizar la ejecución con el visualizador de ejecución de Javascript de python tutor, falla esta verificación y llega a la cláusula else.
Esto es lo que me está desconcertando. hashGraph[2] existe. Puedo replicar lo mismo y obtener el resultado correcto si uso lo siguiente:
let hash = { 2: 0, 15: 3 } let arr = [7] console.log(hash[9 - arr[0]])Si ese código me da el resultado correcto, ¿por qué falla mi condición if?