题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 :
输入: [2,2,1]
输出: 1
注意点
1、一个数与0异或为它本身;(a⊕0 = a)
2、一个数与它本身异或为0;(a⊕a = 0)
3、异或运算满足交换律;(a⊕b⊕a = a⊕a⊕b)
4、所有元素异或,出现两次的相互异或为0,出现一次的与0异或为它本身。
实现
public int singleNumber(int[] nums) {
int single = 0;
//所以元素进行异或运算
for(int i = 0; i < nums.length; i++){
single ^= nums[i];
}
return single;
}