问题描述:
给定一个非空的整数数组,每个元素出现两次,除了其中一个,找到那一个元素。
Example :
Input: [2,2,1]
Output: 1
Input: [4,1,2,1,2]
Output: 4
解题思路:
采用异或的方式,0 与目标数异或结果仍为目标数,两个相同的数异或结果为 0。
0 ^ a = a
a ^ a = 0
所以 0 ^ a ^ b ^ a = (0 ^ b) ^ (a ^ a) = b
代码实现:
class Solution {
public int singleNumber(int[] nums) {
int single = 0;
for (int num : nums) {
single = single ^ num;
}
return single;
}
}
时间复杂度:O(n)
空间复杂度:O(1)