【力扣】只出现一次的数字 III

题目:

260. 只出现一次的数字 III - 力扣(LeetCode)

思路:

[1,2,3,3]

eor = 1^2^3^3 = 1^2 = 3

eor的二进制位中,第一位为1,说明12的二进制的第一位不一样

eor或数组中第一位二进制为1数(将12分开了)

或的结果就是12中的其中一个

再用eor或那个结果,得到另一个为奇数个数的数

代码:

class Solution {
public:
    vector singleNumber(vector& nums) 
    {
       	vector ret;

        int eor = 0;
        for (auto e : nums)
        {
            eor ^= e;
        }
        //int rightOne = eor==INT_MIN ? INT_MIN : eor & (~eor+1);
        int rightOne = 1;
        int temp = eor & rightOne;
        while (temp == 0)
        {
            rightOne <<= 1;
            temp = eor & rightOne;
        }
        int _eor = eor;
        for (auto e : nums)
        {
            if ((e & rightOne) != 0)
            {
                _eor ^= e;
            }
        }
        ret.push_back(_eor);
        ret.push_back(eor^_eor);
        return ret;
    }
};

你可能感兴趣的:(leetcode,算法,职场和发展)