具体思路:
很牛皮的一种思路;
目前见到这种类似找不同的题目,大概就这几个思路:
 1.原地哈希;
 2.利用数值范围进行hash辅助;
 3.位运算;
采用异或思想,对于所以出现两次异或的数,最后全体异或的结果必定是0;
如果其中有指出现一次的a,b两个数,则结果是a^b;
但是对于a^b来说,必定位中至少有一位是1,代表a,b在该位不同;
此时按照该位进行全元素分桶,a,b必定落在不同的桶,每个桶的剩余元素必定成对出现;
此时两个桶分别得异或结果必定是a和b;
具体代码:
class Solution {
public:
    vector<int> singleNumbers(vector<int>& nums) {
        int temp=0;
        for(auto& n:nums)
            temp^=n;
        int div=1;
        while((div&temp)==0){
            div=div<<1;
        }
        int a=0;
        int b=0;
        for(auto& n:nums){
            if((div&n)){
                a^=n;
            }else{
                b^=n;
            }
        }
        return {a,b};
    }
};










