欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

异或---太强了

程序员文章站 2022-07-15 12:06:34
...

异或

异或的性质:
(1)交换律:a ^ b ^ c <=> a ^ c ^ b
(2)任何数与0异或 0 ^ n = n
(3)相同的数异或为0 n ^ n => 0 因此根据以上三条定律,用0与数组中所有元素分别异或,最后会得到没有相同的那个数。
(引用源)

  • 例题1:leetcode第136题

题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例:输入[4,1,2,1,2],输出 4

解法一:异或解(太简洁了):

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

解法二:哈希集(常规操作~~~)

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        unordered_set<int> bobo;
        int ans;
        for(auto i : nums){
            if(bobo.count(i))   bobo.erase(i);
            else    bobo.insert(i);
        }
        for(auto j : bobo)  ans = j;
        return ans;
    }
};

(引用源)

未完待续…

相关标签: 异或