一度だけの数2が表示さの配列を見つけること - のオファーを受賞

タイトル説明

二つの数の整数型配列に加えて、他の数字が二回表示されます。これら二つの図が表示されるだけで検索するプログラムを作成してください。

思考

私は、解決する辞書を取得するために暴力を使用するつもりだった質問は、その後、それぞれの数をカウントします。

 

 

最適化

スペースの複雑さはO(1)であります

XORと、XOR同数のXOR 0,0、任意の数の任意の数です。 

だから、2つの番号のすべてまたは異なる結果の数が一度だけ表示されること

次いで、XOR結果に応じて、ビットの数は、2つの異なるものを同定するために(ちょうどのような見つける必要があります)

このビットパケットによれば、グループは、グループとして、0、1です。このように、2つの図は、異なるグループに割り当てられている必要があります。数字の各セットの内側には、わずか数は一度だけ表示され、残りの数は言うまでもない.....二回登場し、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
            
            

 

公開された82元の記事 ウォンの賞賛2 ビュー4353

おすすめ

転載: blog.csdn.net/qq_22498427/article/details/104816436