异或运算(⊕表示异或运算)
定义:
1 ⊕ 1 = 0
0 ⊕ 0 = 0
1 ⊕ 0 = 1
0 ⊕ 1 = 1
基本公式:
恒等率:X⊕0 = X
归零率:X⊕X = 0
交换律:A⊕B = B⊕A
结合律:(A⊕B)⊕C = A⊕(B⊕C)
实战:
针对LeetCode中的一道基本算法题目,描述如下:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
用异或运算求解,令非空数组为[2,1,2,1,3],则最终答案为3。运算公式如下:
2⊕1⊕2⊕1⊕3 = 3
C++代码:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int num=0;
for(int i=0; i<nums.size();i++)
{
num = num ^ nums[i];
}
return num;
}
};
利用恒等率,初始化num = 0。然后将数组中的所有元素进行异或运算,根据归零率、交换律和结合律,可得出只出现一次的元素。
PS:对整型数据可直接用异或运算。浮点型数据,不可直接异或。