由一道用“異或運(yùn)算符”解決的算法問題而引發(fā)的思考

題目:給一個非空整數(shù)數(shù)組,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)一次的元素。要用線性時間復(fù)雜度解決,不占用額外空間。

示例:輸入[2,2,1]輸出1;輸入[4,1,2,1,2]輸出4

基礎(chǔ)知識:異或運(yùn)算符。例如2^1的異或運(yùn)算要先轉(zhuǎn)換成二進(jìn)制,根據(jù)相同為0不同為1得出010^001=011=3

答案代碼

深入思考:為什么異或能夠解決這道題?源于題目的限制:其余元素僅僅出現(xiàn)兩次。這個兩次可以拓展成偶數(shù)次。我們把該題異或運(yùn)算過程展示一下。以輸入[4,1,2,1,2]為例


異或運(yùn)算具體展示圖

為什么調(diào)換數(shù)組中的1、2、1、2也是4呢?加入我們單獨(dú)看異或運(yùn)算具體展示圖的第個位、或者第十位、或者第百位、或者第千位(也就是挑其中一列豎著看),經(jīng)過偶數(shù)個1或者0,其結(jié)果保持仍原狀。如下圖。

偶數(shù)個1、0異或運(yùn)算是0,0再和只有1個二進(jìn)制0100運(yùn)算仍是0100,所以最后輸出的結(jié)果是0100

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容