题意:
一个数列,有且仅有两个数字出现1次,其它都出现2次,找出出现1次的数。
分析:
我们要判断一个数字只出现了一次,就是要发现它曾经出现过。由于数值的不限制,就不能利用角标。
所以我们必要的考虑一个额外的空间,一个数组,我们遍历给定的数组,将数字放入额外数组,只要额外数组中出现过,就将它删除(因为就可以排除它了,以后就不用参与查找了)。,如果没出现过,就放入。由于我们是要找出现一次的数字,考虑采用数据结构set
public class Solution {
public int[] singleNumber(int[] nums) {
int[] arr = new int[2];
HashSet<Integer> hs = new HashSet<Integer>();
for(int i = 0; i<nums.length; i++){
if(hs.contains(nums[i])){
hs.remove(nums[i]);
}
else{
hs.add(nums[i]);
}
}
Iterator<Integer> iterator = hs.iterator();
arr[0] = iterator.next();
arr[1] = iterator.next();
return arr;
}
}