Two Sum
Problema
Dado um array de números inteiros nums
e um alvo target
, retorne os índices dos dois números em nums
que somam ao target
.
Você pode assumir que cada entrada terá exatamente uma solução, e você não pode usar o mesmo elemento duas vezes.
Solução
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 [];
}
Explicação
A solução utiliza um HashMap para armazenar os números já visitados e seus índices. Para cada número no array:
- Calculamos o complemento necessário para atingir o alvo (target - número atual)
- Verificamos se o complemento já existe no HashMap
- Se existir, encontramos nossa solução
- Se não, adicionamos o número atual e seu índice ao HashMap
Complexidade
- Tempo: O(n)
- Espaço: O(n)
Exemplo
const nums = [2, 7, 11, 15];
const target = 9;
const result = twoSum(nums, target);
console.log(result); // [0, 1]
Casos de Teste
// Teste 1: Caso básico
console.log(twoSum([2, 7, 11, 15], 9)); // [0, 1]
// Teste 2: Números negativos
console.log(twoSum([-1, -2, -3, -4, -5], -8)); // [2, 4]
// Teste 3: Números repetidos
console.log(twoSum([3, 3], 6)); // [0, 1]