题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
思路:两个相同的数异或后为 0,一个数和 0 异或还是它本身,将所有数异或后即得到 A、B 异或的结果,排序后异或
import java.util.Arrays;
//就是异或选择出唯一不重复的数字 ^
public class Offer {
public static void main(String[] args) {
int[] arr = {1,2,3,1,3,4};
num(arr);
}
public static void num(int[] arr) {
Arrays.sort(arr);
for(int i = 0;i < arr.length;) {
if(i == arr.length - 1) {
if(arr[arr.length - 2] != arr[arr.length - 1]) {//为了判断如例子中那样最后一个元素是不重复的
System.out.println(arr[arr.length - 1]);
}
break;
}
int index = arr[i] ^ arr[i + 1];
if(index != 0) {
System.out.println(arr[i]);
i++;
}else {
i = i +2;
}
}
}
}