1. 程式人生 > >陣列中只出現一次的數 python

陣列中只出現一次的數 python

看了網上的解法,對於兩兩出現的數,我應該想到使用異或,我們先計算整個陣列的異或值,那麼最後結果其實就是兩個不一樣的數的異或的結果(因為其他的都兩兩消除了),然後我們根據這個值的最後為1的位,來來講這個陣列進行分類,得到的兩個陣列,在自己進行異或就分別得到了兩個不一樣的值,程式碼如下:
 

# -*- coding:utf-8 -*-
class Solution:
    # 返回[a,b] 其中ab是出現一次的兩個數字
    def FindNumsAppearOnce(self, array):
        # write code here
        result = 0
        r1 = 0
        r2 = 0
        for i in array:
            result ^=  i
        s = bin(result)
        index = -1
        j = -1
        for i in s[::-1]:
            if i == '1':
                index = j
                break
            j -= 1
        l1 = []
        l2 = []
        for i in array:
            if bin(i)[index] == '1':
                l1.append(i)
            else:
                l2.append(i)
        for i in l1:
            r1 ^= i
        for i in l2:
            r2 ^= i
        return r1,r2