剑指offer 40.数组中只出现一次的数字
题目
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
思路
如果只有一个数,当然是异或更好用,相同数字异或为0,但是有两个数字,这种方法无法快速找到,所以不如用hashset,如果存在就删除,不存在就加入,最后把两个数字取出来即可。
代码
public void FindNumsAppearOnce(int[] array, int num1[], int num2[]) {
HashSet<Integer> set = new HashSet<>();
for (int i : array) {
if (set.contains(i)) {
set.remove(i);
} else {
set.add(i);
}
}
int[] t = new int[2];
int temp = 0;
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()) {
t[temp++] = iterator.next();
}
num1[0] = t[0];
num2[0] = t[1];
}