异或---太强了
程序员文章站
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;
}
};
未完待续…