只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例1:
输入: [2,2,1]
输出: 1
示例2;
输入: [4,1,2,1,2]
输出: 4
标准参考一:
class Solution {
public int singleNumber(int[] A) {
if (A == null || A.length == 0) {
return -1;
}
int rst = 0;
for (int aA : A) {
rst ^= aA;
}
return rst;
}
}
小白答案:
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
class Solution {
public int singleNumber(int[] nums) {
HashMap<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);
}
}
int temp=0;
Set<Entry<Integer, Integer>> set=map.entrySet();
for(Entry<Integer, Integer> s:set) {
if(s.getValue()==1) {
temp=s.getKey();
break;
}
}
return temp;
}
}
解读参考答案,其实发现自己的想法是和参考一样的,都向通过某个类或者是某种操作自带的特性实现。但不巧的是,参考发现的特性,使用的特性,很巧。自己使用的HashMap进行键值对的映射记录,但是参考则是很巧的利用了异或这个操作。
a^b^a^c^b=c,所以要找到对应的单个数字,仅仅是只是将数组中的元素进行异或操作即可,值得学习借鉴!