面試100 34找出數(shù)組中唯一出現(xiàn)一次的兩個數(shù)字
面試100 34找出數(shù)組中唯一出現(xiàn)一次的兩個數(shù)字
一問題描述
一個數(shù)組中,存在兩個只出現(xiàn)一次的數(shù)字,其余的數(shù)字均出現(xiàn)兩次。要求在時間復雜度o(n),空間復雜度為o(1)的情況下找出這兩個數(shù)字。
二 問題分析
此題實際考察了,對位操作的理解。首先進行簡化,考慮只有一個數(shù)組中,只存在出現(xiàn)了一次的一個數(shù)字,其余數(shù)字在數(shù)組中出現(xiàn)兩次,試
找出這個數(shù)字。
三 解決方案
首先 回憶 異或操作,任意數(shù)字與自身相異或,結果都為0.
還有一個重要的性質,即任何元素與0相異或,結果都為元素自身。
解決方案:
1 從數(shù)組的起始位置開始,對元素執(zhí)行異或操作,則最后的結果,即為此只出現(xiàn)了一次的元素。
2 題目中,數(shù)組中存在兩個不同的元素,若是能仿造上述的解決方案,將兩個元素分別放置在兩個數(shù)組中,然后分別對每個數(shù)組進行異或操作,
則所求異或結果即為所求。
3 首先對原數(shù)組進行全部元素的異或,得到一個必然不為0的結果,然后判斷該結果的2進制數(shù)字中,為1的最低的一位。
然后根據(jù)此位是否為1 ,可以把原數(shù)組分為兩組。則兩個不同的元素,必然分別在這兩個數(shù)組中。
4 然后對兩個數(shù)組,進行異或操作,即可得到所求。
四 代碼示例























































posted on 2011-05-21 21:20 kahn 閱讀(1358) 評論(2) 編輯 收藏 引用 所屬分類: 算法相關