题解 | #数组中只出现一次的两个数字#
数组中只出现一次的两个数字
http://www.nowcoder.com/practice/389fc1c3d3be4479a154f63f495abff8
题解
题目
一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 数据范围:数组长度2≤n≤1000,数组中每个数的大小 0<val≤1000000
要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
提示:输出时按非降序排列。
思路
一看到这个数组中只出现几次的情况,我就立马想到了HashSet,为什么不是TreeSet或者是TreeMap其他的呢,因为HashSet有一个功能contains(),可以判断HashSet中是否含有某个key,那么我们只要遍历这个数组,一一判断HashSet中是否含有,若没有则添加,若有则删除。最后只要将这个set转为数组即可。
HashSet是根据哈希来检索的,所以速度很快,像list集合也是有contains()方法,但是list是将数组从头到尾遍历一次,很明显检索的速度不如HashSet。
代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型一维数组
*/
public int[] FindNumsAppearOnce (int[] array) {
// write code here
HashSet<Integer> set = new HashSet<Integer>();
for(int i : array){
if(!set.contains(i)){
//set集合不包含这个i,添加进集合
set.add(i);
}else{
set.remove(i);
}
}
int[] arr = new int[2];
int i=0;
for(int a : set){
arr[i++] = a;
}
return arr;
}
}