DEV Community

Luis Angel F.R.
Luis Angel F.R.

Posted on

LeetCode: 1. Two Sum, Solución paso a paso

LeetCode: 1. Two Sum, Solución paso a paso

Hoy quiero compartir cómo resolví el problema Two Sum de LeetCode.

Es uno de los clásicos de entrevistas técnicas y me parece un excelente punto de partida si estás practicando lógica o estructuras de datos.

Problema

Dado un arreglo de enteros nums y un entero target, se deben devolver los índices de los dos números cuya suma sea igual a target.

El problema garantiza que siempre habrá una solución, y no se puede usar el mismo número dos veces.

Ejemplo rápido

  • Entrada: nums = [2,7,11,15], target = 9 Salida esperada: [0,1] porque nums[0] + nums[1] = 2 + 7 = 9

1. Definiendo la función

Primero definiré la función que recibirá el arreglo y el número objetivo:

function twoSum(nums: number[], target: number): number[] {
  // La implementación irá aquí
}
Enter fullscreen mode Exit fullscreen mode

2. Creando un Map para almacenar los números vistos

Voy a usar un Map<number, number> para guardar cada número junto con su índice.
Esto me permitirá verificar si el complemento que necesito ya apareció antes.

const map = new Map<number, number>()
Enter fullscreen mode Exit fullscreen mode

3. Iterando el arreglo

Recorro el arreglo con un for, procesando cada número.

for (let i = 0; i < nums.length; i++) {
  // Aquí verificare cada número
}
Enter fullscreen mode Exit fullscreen mode

4. Calculando el complemento

En cada iteración calculo el complemento, que es el número que necesito para alcanzar el target.

const complement = target - nums[i]
Enter fullscreen mode Exit fullscreen mode

5. Verificando si ya encontré la pareja

Si el complemento ya está en el mapa, significa que tengo la combinación correcta.
En ese caso, retorno los índices correspondientes.

if (map.has(complement)) {
  return [map.get(complement)!, i]
}
Enter fullscreen mode Exit fullscreen mode

6. Registrando el número actual

Si no encontré el complemento, guardo el número actual con su índice para usarlo más adelante.

map.set(nums[i], i)
Enter fullscreen mode Exit fullscreen mode

Código completo

function twoSum(nums: number[], target: number): number[] {
  const map = new Map<number, number>()

  for (let i = 0; i < nums.length; i++) {
    const complement = target - nums[i]
    if (map.has(complement)) {
      return [map.get(complement)!, i]
    }
    map.set(nums[i], i)
  }

  return []
}

console.log(twoSum([2,7,11,15], 9)) // [0,1]
console.log(twoSum([3,2,4], 6)) // [1,2]
console.log(twoSum([3,3], 6)) // [0,1]
Enter fullscreen mode Exit fullscreen mode

Top comments (0)