classSolution{publicstaticint[]singleNumbers(int[] nums){
Set<Integer> set =newHashSet<>();int[] result =newint[2];for(int num : nums){if(set.contains(num)){
set.remove(num);}else{
set.add(num);}}int i=0;for(Integer a : set){
result[i++]= a;}return result;}}
方法二:位运算
class Solution {
//位运算
public static int[] singleNumbers(int[] nums) {
int x=0,y=0,n=0,m=1;
for(int num : nums) { //1.遍历异或,得到不同的两个值的异或
n = n^num;
}
while((n&m) == 0) { //2.循环左移,找到不同的两个值的异或的二进制值中为1的位置,即二数不同位的位置
m=m<<1;
}
for(int num : nums) { //根据差别位m把二个不同的值分成二组,然后各自异或,得到的结果x,y分别就是二个不同的值
if((num & m) != 0) {
x = x^num;
}else {
y = y^num;
}
}
return new int[] {x,y};
}
}