题解:
前置知识
- 0与任何数异或为该数本身 :0^m=m
- 奇数个数m相异或的结果为该m本身:
- 偶数个数m相异或的结果为0
- 异或运算满足交换律a^ b^ c=a^b ^c
由前置知识可知,我们只需要取得数组中所有数相异或的结果即可!
代码:
class Solution {
public int singleNumber(int[] nums) {
int res=0;//0与任何数异或为该数本身。所以以0为起始被异或数
for(int i=0;i<nums.length;i++)
res^=nums[i];//奇数个数m的异或为该数本身,偶数个m相异或得到0,且异或运算满足交换律
return res;//最后结果即为奇数个数的数。
}
}