题目
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次,请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)
示例
- 例如输入数组{2, 4, 3, 6, 3, 2, 5 ,5},因为只有4 、6 这两个数字只出现一次,其他数字都出现了两次,所以输出4和6
解法
public static int[] findItemAppearanceOnce(int[] arr) {
if (arr == null || arr.length == 0) {
throw new IllegalArgumentException("arr is invalid");
}
HashMap<Integer, Integer> data = new HashMap<>(arr.length);
// 遍历添加数据
for (int k : arr) {
if (data.containsKey(k)) {
data.put(k, 2);
} else {
data.put(k, 1);
}
}
int[] num = new int[2];
int count = 0;
// 找出出现一次的数据存储到数组中
for (int j : arr) {
if (data.get(j) == 1) {
if (count == 0) {
num[0] = j;
count++;
} else {
num[1] = j;
}
}
}
return num;
}