按照扩展1的逻辑,则题目2中无序数组,依次异或的结果,一定是,出现奇数次的结果result = A xor B。而且这个,结果一定是不等于0的,由于如果等于0了,就代表这两个数雷同了,不符合题意。如何根据这个!=0的异或结果,求出这两个值呢?result不等于0,代表结果的补码中,一定至少有一位的值为1,代表,在这一位,A和B的补码,一定一个是1一个是0,就可以使用这个特性,将原数组,分为两个子数组,且A和B一定会分到两个数组中,再使用扩展1的思路,分别独立举行异或运算,两个子数组的结果,就是A和B。
代码
[code] public static int[] getLostTwoNum(int[] array) { int[] result = new int[2]; int xorResult = 0; for (int i = 0; i < array.length; i++) xorResult ^= array; if (xorResult == 0) return null;//不符合题意 int separator = 1; //确定2个整数的不同位,以此分组 while (0 == (xorResult & separator)) separator