2024-06-18
Em muitos problemas de programação, é comum lidar com listas onde todos os elementos, exceto um, aparecem exatamente duas vezes. Encontrar o número único pode ser uma tarefa interessante e desafiadora. Neste post, vamos explorar duas abordagens para resolver esse problema: uma usando o operador XOR e outra usando um dicionário para contar ocorrências.
Dada uma lista de números onde cada número, exceto um, aparece exatamente duas vezes, encontre o número único.
Exemplo:
Entrada: [4, 1, 2, 1, 2]
Saída: 4
O operador XOR (ou exclusivo) é uma operação lógica que resulta em verdadeiro (ou 1) se e somente se um dos operandos for verdadeiro (ou 1), mas não ambos. Uma propriedade interessante do XOR é que A ^ A = 0 e A ^ 0 = A. Isso significa que quando você XOR todos os números da lista, os números que aparecem em pares se cancelam, e o número que aparece uma única vez permanece.
Implementação em Python:
def find_unique_number(nums):
unique_number = 0
for num in nums:
unique_number ^= num
return unique_number
# Exemplo de uso
nums = [4, 1, 2, 1, 2]
unique_number = find_unique_number(nums)
print(f"O número único é: {unique_number}")
Explicação:
unique_number
com 0.nums
.unique_number
e o número atual.unique_number
conterá o número que aparece apenas uma vez.Outra abordagem eficiente é usar um dicionário (ou o objeto Counter
da biblioteca collections
) para contar a ocorrência de cada número na lista. Em seguida, identificamos o número que aparece apenas uma vez.
Implementação com Dicionário:
def find_unique_number(nums):
count_dict = {}
# Contar a ocorrência de cada número
for num in nums:
if num in count_dict:
count_dict[num] += 1
else:
count_dict[num] = 1
# Encontrar o número que aparece apenas uma vez
for num, count in count_dict.items():
if count == 1:
return num
# Exemplo de uso
nums = [4, 1, 2, 1, 2]
unique_number = find_unique_number(nums)
print(f"O número único é: {unique_number}")
Explicação:
count_dict
para armazenar a contagem de cada número.Counter
da Biblioteca collections
A biblioteca collections
oferece uma maneira conveniente de contar elementos usando Counter
.
Implementação com Counter
:
from collections import Counter
def find_unique_number(nums):
# Contar a ocorrência de cada número usando Counter
count = Counter(nums)
# Encontrar o número que aparece apenas uma vez
for num, freq in count.items():
if freq == 1:
return num
# Exemplo de uso
nums = [4, 1, 2, 1, 2]
unique_number = find_unique_number(nums)
print(f"O número único é: {unique_number}")
Ambas as abordagens apresentadas são eficientes e possuem complexidade de tempo O(n). A escolha entre usar XOR ou um dicionário depende do contexto e das preferências pessoais. O uso de XOR é elegante e usa constante espaço adicional, enquanto o uso de um dicionário é mais intuitivo e fácil de entender, especialmente para iniciantes.
Escolha a abordagem que melhor se adapta às suas necessidades e ao seu estilo de programação. Independentemente da escolha, você estará bem equipado para resolver este problema clássico de encontrar o número único em uma lista.
Click here Para ler mais.