給出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。
*/