解题思路:
最直接的方法,统计每个数出现的次数。使用 HashMap 或者 HashSet,由于每个数字最多出现两次,我们可以使用 HashSet。
遍历数组,遇到的数如果 HashSet 中存在,就把这个数删除。如果不存在,就把它加入到 HashSet 中。最后 HashSet 中剩下的两个数就是我们要找的了。
HashSet:
class Solution {
public int[] singleNumbers(int[] nums) {
HashSet<Integer>set=new HashSet<>();
for(int i:nums){
if(set.contains(i))
set.remove(i);
else set.add(i);
}
int []res=new int[2];
int i=0;
for(int n:set){
res[i]=n;
i++;
}
return res;
}
}
HashMap:
class Solution {
public int[] singleNumbers(int[] nums) {
HashMap<Integer,Integer> map=new HashMap<>();
for(int i:nums){
if(map.containsKey(i))
map.put(i,map.get(i)+1);
else map.put(i,1);
}
int []res=new int[2];
int i=0;
for(int n:nums){
if(map.get(n)==1)
res[i++]=n;
}
return res;
}
}
参考博客链接: