Bootstrap

Leetcode136. 只出现一次的数字(HOT100)

链接

我的代码:

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        unordered_set<int> s;
        for(auto&e:nums){
            if(s.count(e)==0)
                s.insert(e);
            else
                s.erase(e);
        }
        return *(s.begin());//not s.pop(),unordered_set没有pop方法。
    }
};

更好的代码:

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int unique = 0;
        for(auto&e:nums){
            unique^=e;//xor
        }
        return unique;
    }
};

妙哉 ,异或:同则为0,异则为1。

原来数组:a b b a c

答案为c

怎么做?

答:(a^a) ^(b^b)^(c) = 0^0^c = 0^c = c

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;