lintcode落單的數|||
阿新 • • 發佈:2018-10-31
題目:
給出2*n + 2個的數字,除其中兩個數字之外其他每個數字均出現兩次,找到這兩個數字。
樣例:
給出 [1,2,2,3,4,4,5,3],返回 1和5
答案:
public class Solution {
/*
* @param A: An integer array
* @return: An integer array
*/
public List<Integer> singleNumberIII(int[] A) {
// write your code here
List<Integer> ans = new ArrayList<Integer>();
if(A == null || A.length == 0) return ans;
int oneIndex = 0;
int aXORb = 0;
for(int num : A) aXORb ^= num;
while(aXORb != 0){
if((aXORb & 1) == 1) break;
oneIndex++;
aXORb >>= 1;
}
int a = 0, b = 0;
for(int num : A){
if(((num >> oneIndex) & 1) == 1) a ^= num;
else b ^= num;
}
ans.add(a);
ans.add(b);
return ans;
}
}