给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。
样例
给出 [1,2,2,3,4,4,5,3],返回 1和5
挑战
O(n)时间复杂度,O(1)的额外空间复杂度
class Solution {
int getbitposition(int a){
int num=1;
int count=0;
while((a&num)==0){
num<<=1;
++count;
}
return count;
}
public:
vector<int> singleNumberIII(vector<int> &A) {
if(A.empty())
return vector<int>();
int result=0;
for(auto &e:A)
result^=e; //result的最终结果是所求两个数的异或
int k=getbitposition(result); //取得result中为1的一位,所求两个数对应的的该位值不同
int result2=0;
result=0;
for(auto &e:A){ //重新划分
if(e&(1<<k))
result^=e;
else
result2^=e;
}
return vector<int> {result,result2};
}
};