一个数组,其他数均出现偶数次,只有两个数只出现一次。
C++实现
#include <iostream>
#include <vector>
using namespace std;
void findTwoNum(const vector<int>&v) {
if (v.size()) {
int temp;
for (int i = 0; i < v.size(); i++) {
temp ^= v[i];
}
int flag = 1; //flag记录着两个数第一次不同的位
//例如p = 10100 q = 11000 则 flag = 00100
while (!(temp & 1)) {
flag = flag << 1;
temp = temp >> 1;
}
int p, q; //p q即为所求的数
p = q = 0;
for (int i = 0; i < v.size(); i++) {
if (v[i] & temp) { //利用异或 去除出现偶数次的相同数
p ^= v[i];
}
else {
q ^= v[i];
}
}
cout << "p=" << p << " q=" << q;
}
}