Ganha a oferta - para encontrar uma variedade de número dois aparece apenas uma vez

título Descrição

Além de uma matriz de números inteiros em dois números, os outros números aparecem duas vezes. Por favor, escreva um programa para encontrar estas duas figuras aparecem apenas.

pensamento

A pergunta que eu ia usar a violência para resolver, obter um dicionário, em seguida, conta cada número.

 

 

otimização

complexidade de espaço é O (1)

Com XOR, o mesmo número de XOR é XOR 0,0 qualquer número de qualquer número. 

Assim que a totalidade ou uma série de resultados diferentes para os dois números aparecem apenas uma vez

Em seguida, de acordo com o resultado XOR, o número de bits para identificar dois um diferente (só precisa encontrar uma like)

De acordo com este bit pacotes, um grupo é 0, 1, como um grupo. Desta forma, as duas figuras deve ter sido atribuído a diferentes grupos. O interior de cada conjunto de números, apenas alguns aparecer apenas uma vez, e o número restante apareceu duas vezes ..... escusado será dizer, foram XOR

class Solution:
    def FindNumsAppearOnce(self, array):
        if len(array)<2:
            return False
        num = array[0] ^ array[1]
        for i in range(2,len(array)):
            num ^= array[i]
        
        # 找到二进制位不同的一位,只需要找出来一位就行
        i = 1
        while num%2 == 0:
            num = int(num//2)
            i += 1
        
        # 按照上面找到的二进制位分组异或
        num1 = 0
        num2 = 0
        for num in array:
            if num%(2**i) == (2**(i-1)):
                num1 ^= num
            else:
                num2 ^= num
        return num1,num2
            
            

 

Publicado 82 artigos originais · ganhou elogios 2 · Vistas 4353

Acho que você gosta

Origin blog.csdn.net/qq_22498427/article/details/104816436
Recomendado
Clasificación