剑指offer 40.数组中只出现一次的数字

剑指offer 40.数组中只出现一次的数字

题目

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

思路

如果只有一个数,当然是异或更好用,相同数字异或为0,但是有两个数字,这种方法无法快速找到,所以不如用hashset,如果存在就删除,不存在就加入,最后把两个数字取出来即可。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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];
}
---本文结束,感谢阅读---