如果一个序列除了某个数出现一次(奇数次)外,其他数均出现两次(偶数次),最终全部异或的结果会是这个出现一次(奇数次)的数;
如果一个序列所有的数均出现两次(偶数次),最终全部异或的结果会是 0;
如果一个序列除了某 2 个数出现一次(奇数次)外,其他数均出现两次(偶数次),最终全部异或的结果一定不为 0;
class Solution{
public:
void FindNumsAppearOdds(vector<int> nums, int *num1, int *num2){
if (nums.size() < 2) return;
int myxor = accumulate(nums.begin(), nums.end(), 0, [](int x, int y) { return x^y; });
int flag = 1;
while ((myxor & flag) == 0) flag <<= 1;
*num1 = myxor;
*num2 = myxor;
for (int i = 0; i < nums.size(); ++i)
if (flag & nums[i]) *num1 ^= nums[i];
else *num2 ^= nums[i];
}
}