题目 :给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
第一种解法:使用map,判断map的value值就知道出现了几次。
public static Integer findSingleNum(int[] nums){
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(nums[i])){
map.put(nums[i],map.get(nums[i])+1);
}
else{
map.put(nums[i],1);
}
}
for (Map.Entry<Integer, Integer> c : map.entrySet()) {
if(c.getValue()==1){
return c.getKey();
}
}
return -1;
}
map容易想到,但是时间复杂度和空间负责度都有点高。
第二种解法:使用异或思想,如果相同就返回0,不同就返回1,最终的结果就是出现一次的数。
public int singleNumber(int[] nums) {
int num=0;
for(int i=0;i<nums.length;i++){
num ^=nums[i];
}
return num;
}