只出现一次的数字
1.题目描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
2.思路
可以使用HashMap和异或运算的方式来解决
使用HashMap,key存放数字,value存放key出现的次数即可
使用异或运算的方式也可以,异或运算的符号是^,什么是异或运算比如:
1001 1100 ^ 0101 1010 = 0111 0111
异或运算就是相同为 0,不同为1.
而且两个相同的数经过异或运算后会变成0,而且异或运算可以使用交换律和结合律
3.代码
class Solution {
// 方法1:使用Map的方式
public int singleNumber(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0 ; i < nums.length ; i++){
int count == map.get(nums[i]) == null ? 0 : map.get(nums[i]);
count++;
map.put(nums[i],count);
}
for(int num : map.keySet()){
if(map.get(num) == 1){
return num;
}
}
return -1;
}
// 方法2:使用异或的方式
public int singleNumber(int[] nums) {
int key = 0;
for(int i = 0 ; i < nums.length ; i++){
key = ket ^ nums[i];
}
return key;
}
}