給出2*n + 1 個(gè)的數(shù)字,除其中一個(gè)數(shù)字之外其他每個(gè)數(shù)字均出現(xiàn)兩次绰精,找到這個(gè)數(shù)字撒璧。
樣例 給出 [1,2,2,1,3,4,3] 返回 4
挑戰(zhàn) 一次遍歷,常數(shù)級(jí)的額外空間復(fù)雜度
最簡(jiǎn)單的辦法就是對(duì)元素進(jìn)行遍歷查重笨使,沒(méi)有重復(fù)的就返回卿樱,但是這樣的效率很低。
此處可以利用位運(yùn)算來(lái)進(jìn)行處理硫椰,當(dāng)兩個(gè)相同的數(shù)進(jìn)行異或時(shí)繁调,值為0萨蚕,不同的數(shù)異或時(shí),值為1.利用此特點(diǎn)蹄胰,可以將數(shù)組內(nèi)所有的數(shù)字進(jìn)行異或處理岳遥,最后得出的結(jié)果便是落單的數(shù)。
ab=ba
0^a=a
class Solution:
""" @param A : an integer array
@return : a integer
"""
def singleNumber(self, A):
# write your code here
result = 0
for i in A:
result = result ^ i
return results