一组数中,只有一个数出现一次,其他数都出现了2次,找到这个数
方法一:用map,key是这个数,value用作统计这个数出现的次数
遍历map的key,输出value=1的那个key
public int singleNumber(int[] A) {
int length = A.length;
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i = 0;i<length;i++){
if(map.get(A[i]) == null){
map.put(A[i], 1);
}else{
map.put(A[i], map.get(A[i])+1);
}
}
for(Iterator it = map.keySet().iterator();it.hasNext();){
int key = (Integer)it.next();
if(map.get(key) == 1){
return key;
}
}
return 0;
}
耗时:532 ms
方法二:异或,遍历数组,逐个异或,最后得到的数就是只出现一次的那个数
public int singleNumber(int[] A) {
int length = A.length;
int ret = 0;
for(int i = 0;i<length;i++){
ret ^= A[i];
}
return ret;
}
耗时:
384 ms