异或求数组中唯二的出现奇数次的数

注意到如果数组中只有一个出现奇数次的数,那么异或和就是答案,现在异或和xor1=a^b,

求xor1的lowbit,再遍历一遍,易知a和b必然有一个&lowbit=0,那么把这样的数找出来,就可以得到其中一个数xor2,xor2^xor1就是另一个数了

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        int eor1 = 0;
        for (int x : nums) {
            eor1 ^= x;
        }
        // 为什么这么写?自己去查!语言问题自己搞定
        unsigned int rightOne = (unsigned int)eor1 & (-(unsigned int)eor1);
        int a = 0;
        for (int x : nums) {
            if (((unsigned int)x & rightOne) == 0) {
                a ^= x;
            }
        }
        return {a, eor1 ^ a};
    }
};
posted @ 2026-03-02 15:56  Lambda_L  阅读(0)  评论(0)    收藏  举报