如果一个序列除了某个数出现一次(奇数次)外,其他数均出现两次(偶数次),最终全部异或的结果会是这个出现一次(奇数次)的数;
如果一个序列所有的数均出现两次(偶数次),最终全部异或的结果会是 0;
如果一个序列除了某 2 个数出现一次(奇数次)外,其他数均出现两次(偶数次),最终全部异或的结果一定不为 0;
class Solution{public: void FindNumsAppearOdds(vector 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]; }}