题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
分析
常规方法很容易,但是最巧妙最高效的方法应该是位运算,异或操作。
异或操作满足三个特性:
-
任何数和 0 做异或运算,结果都是原来的数。
-
任何数和自身做异或运算,结果都是 0
-
异或运算满足数学等式上的交换律和结合律
算法代码
public int singleNumber(int[] nums) {
int num = nums[0];
for (int i = 1; i < nums.length; i++) {
int temp = nums[i];
num ^= temp;
}
return num;
}