题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
unordered_map<int,int> map;
for(const int k: data) ++map[k];
vector<int> res;
for(const int k: data) {
if(map[k]==1) {
res.push_back(k);
}
}
*num1 = res[0],*num2 = res[1];

}
};

class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
int x =0;
for(const int i:data) x^=i;
x = x&(-x);
*num1 = *num2 = 0;
for(const int i:data) {
if(x & i) *num1 ^= i;
else *num2 ^= i;
}

}
};