Single Number
Problema
Dado um array não vazio de números inteiros nums, cada elemento aparece duas vezes, exceto por um. Encontre esse único elemento.
Você deve implementar uma solução com complexidade de tempo linear O(n) e usar apenas espaço extra constante O(1).
Solução
function singleNumber(nums: number[]): number {
let result = 0;
for (const num of nums) {
result ^= num;
}
return result;
}
Explicação
A solução utiliza a propriedade do operador XOR (^):
- XOR de um número com ele mesmo é 0
- XOR de um número com 0 é o próprio número
- XOR é comutativo e associativo
Portanto, ao fazer XOR de todos os números:
- Números que aparecem duas vezes se anulam (resultado 0)
- O número que aparece uma vez permanece
Complexidade
- Tempo: O(n)
- Espaço: O(1)
Exemplo
const nums = [4, 1, 2, 1, 2];
const result = singleNumber(nums);
console.log(result); // 4
Casos de Teste
// Teste 1: Caso básico
console.log(singleNumber([2, 2, 1])); // 1
// Teste 2: Número único no meio
console.log(singleNumber([4, 1, 2, 1, 2])); // 4
// Teste 3: Array com um elemento
console.log(singleNumber([1])); // 1
// Teste 4: Números negativos
console.log(singleNumber([-1, -1, -2])); // -2
Observações
- Esta solução é muito eficiente em termos de espaço e tempo
- Funciona porque cada número aparece exatamente duas vezes (exceto um)
- É uma aplicação interessante de operações bit a bit
- Não requer estruturas de dados adicionais