class Solution { public: //如果数组中只有一个单数,所有的数进行异或,结果值为单数 //但是有两个,我们想就分两组来异或,通过一位来分两组,相同的数一定为一组, //但是两个单数如何分到两组呢,需要找到那一位可以区分两个数的,也就是两个数的那位是不同的,本数组所有进行异或,两个数不同的那位为1,使用即可 vector<int> FindNumsAppearOnce(vector<int>& nums) { int s = 0; for(int i=0; i<nums.size(); i++){ //所有进行异或 s ^= nums[i]; } int mask = 1; while((mask & s) == 0){ //找到一个1 mask <<= 1; } int a=0, b=0; for(int num:nums){ if( (num & mask)==0 ){ //分组异或 a ^= num; }else{ b ^= num; } } if(a > b){ swap(a, b); //排序 } return {a, b}; } };