题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例
示例1
输入: [2,2,1]
输出: 1
示例2
输入: [4,1,2,1,2]
输出: 4
分析
异或运算符的应用:
运算特点:相同为0,不同为1
-
交换律:a ^ b ^ c <=> a ^ c ^ b;
-
任何数与0相异或为任何数 0 ^ n => n;
-
相同的数异或为0: n ^ n => 0;
-
一个数与同一个数异或两次,原数不变: m ^ n ^ n => m;
设一个初始值为0的变量,将它依次与数组中每一个数异或运算一次,最后得到的就是只出现了一次的数字
实现代码
class Solution {
public int singleNumber(int[] nums) {
int c = 0;
for(int i = 0; i < nums.length; i ++) {
c = c ^ nums[i];
}
return c;
}
}