題目:給一個非空整數(shù)數(shù)組,除了某個元素只出現(xiàn)一次以外闻牡,其余每個元素均出現(xiàn)兩次净赴。找出那個只出現(xiàn)一次的元素。要用線性時間復(fù)雜度解決罩润,不占用額外空間玖翅。
示例:輸入[2,2,1]輸出1;輸入[4,1,2,1,2]輸出4
基礎(chǔ)知識:異或運算符割以。例如2^1的異或運算要先轉(zhuǎn)換成二進制,根據(jù)相同為0不同為1得出010^001=011=3
答案代碼
深入思考:為什么異或能夠解決這道題金度?源于題目的限制:其余元素僅僅出現(xiàn)兩次。這個兩次可以拓展成偶數(shù)次严沥。我們把該題異或運算過程展示一下猜极。以輸入[4,1,2,1,2]為例
異或運算具體展示圖
為什么調(diào)換數(shù)組中的1、2消玄、1跟伏、2也是4呢?加入我們單獨看異或運算具體展示圖的第個位翩瓜、或者第十位受扳、或者第百位、或者第千位(也就是挑其中一列豎著看)奥溺,經(jīng)過偶數(shù)個1或者0,其結(jié)果保持仍原狀骨宠。如下圖浮定。
偶數(shù)個1、0異或運算是0,0再和只有1個二進制0100運算仍是0100层亿,所以最后輸出的結(jié)果是0100