lintcode -- 落單的數III

給出2*n + 2個的數字,除其中兩個數字之外其他每個數字均出現兩次,找到這兩個數字。

樣例

給出 [1,2,2,3,4,4,5,3],返回 1和5




/*
當然對於這樣的題目,利用HashMap是最簡單不過的了。
*/
public class Solution {
    public List<Integer> singleNumberIII(int[] A) {
        // write your code here
        HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
        LinkedList<Integer> res = new LinkedList<Integer>();
        for(int i=0;i<A.length;i++){
            if(map.containsKey(A[i])){
                 map.remove(A[i]);
            }else{
                map.put(A[i],1);
            }
        }
        for(Integer k:map.keySet()){
            res.add(k);
        }
        return res;
    }
}


//博客


/*
根據落單的數I,可以想到,所有的數進行異或運行的結果就是所求兩個數的異或結果。


這個異或的結果,二進制數是1的位置說明這兩個數對應的二進制位不相同。然後再怎麼還原???
參考,理解的不是很透,找到第k位後,再判斷數組中所以數的第k位是0 還是1,,出現兩次的數對求解無影響,通過這個第k爲把數組分成兩類,也就把兩個數分開了,這裏的第k位在a、b中一定不相同的,一定是一個0一個1。
*/

發佈了124 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章