劍指offer 面試題40:數(shù)組中只出現(xiàn)一次的數(shù)字

題目:
一個整型數(shù)組里除了兩個數(shù)字之外,其他的數(shù)字都出現(xiàn)了兩次。請寫程序找出這兩個只出現(xiàn)一次的數(shù)字。要求時間復(fù)雜度為O(n),空間復(fù)雜度為O(1)

解法
分析:
如果只有一個數(shù)字出現(xiàn)一次,要找出這個數(shù)字,那直接依次異或,因為兩個相同的數(shù)字亦或結(jié)果為0,0與任何數(shù)字異或結(jié)果還是那個數(shù)字。

現(xiàn)在出現(xiàn)兩個,那么考慮分成兩個子數(shù)組,但是要求成對的數(shù)字分在一起,那兩個不同的數(shù)字分別在兩個子數(shù)組里。

  1. 所有數(shù)字依次異或,結(jié)果為那兩個不同的數(shù)字異或的結(jié)果,并且結(jié)果一定非0,記為a
  2. 從左至右找出a第一個bit位非0的index,以此為依據(jù)將原數(shù)組分為兩個子數(shù)組(這樣的分類標(biāo)準(zhǔn)可以達(dá)到上述的目的:1)相同的數(shù)字一定落在同一個子數(shù)組里 2)那兩個不同的數(shù)字分布在不同的子數(shù)組里)
  3. 分成兩個子數(shù)組后,分別異或即可
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容