題目
給定一個非空整數(shù)列表,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。請找出那個只出現(xiàn)了一次的元素。
注意:除了定義的返回結(jié)果變量外,不允許使用額外空間,并且不允許使用編程語言的內(nèi)置函數(shù)。
例如:
給定一個列表:[4, 1, 2, 1, 2],返回結(jié)果:4
給定一個列表:[2, 2, 1],返回結(jié)果:1
實(shí)現(xiàn)思路
- 通過
位運(yùn)算來實(shí)現(xiàn),設(shè)置一個返回值res,默認(rèn)值為0 - 遍歷列表元素,每次均與res進(jìn)行異或運(yùn)算
- 列表中只有1個元素出現(xiàn)一次,其余元素均出現(xiàn)兩次,相同元素異或的結(jié)果為0,所以最終的結(jié)果res就是這個只出現(xiàn)一次的元素
在二進(jìn)制的異或運(yùn)算中,例如a=12,b=7,那么a異或b的結(jié)果c計(jì)算如下:
a = 0 0 0 0 1 1 0 0
b = 0 0 0 0 0 1 1 1
c = 0 0 0 0 1 0 1 1 (相同位的值為0,不同為1)所以我們可以看出:0異或任一個數(shù)a,其結(jié)果為 a;任一數(shù)a異或自己,也就是 a異或a,其結(jié)果為 0
代碼實(shí)現(xiàn)
def singleNumber(nums):
res = 0
for num in nums:
res = res ^ num
return res
更多Python編程題,等你來挑戰(zhàn):Python編程題匯總(持續(xù)更新中……)