给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
例:
-
输入: [2,2,1]
-
输出: 1
-
输入: [3,4,1,4,3]
-
输出: 1
异或运算有以下几个特点:
1)一个数和 0 做 XOR 运算等于本身:a⊕0 = a
2) 一个数和其本身做 XOR 运算等于 0:a⊕a = 0
3)XOR 运算满足交换律和结合律:a⊕b⊕a = (a⊕a)⊕b = 0⊕b = b
Java代码如下:
(1) 用异或进行处理:
public int singleNumber(int[] nums) {
int ans = 0;
for(int num: nums) {
ans ^= num;
}
return ans;
}
(2) 用HashSet进行处理:
public int singleNumber(int[] nums) {
Set<Integer> set = new HashSet<>();
//经过此循环HashSet只剩下一个元素
for(int num:nums){
if(set.contains(num)){
set.remove(num);
}else{
set.add(num);
}
}
Iterator<Integer> it = set.iterator();
while(it.hasNext()){
return it.next();
}
return -1;
}