package sort;
import javax.jws.Oneway;
public class Test56 {
public static void main(String[] args) {
int[] s = { 1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7 };
findSingle(s);
}
public static void findSingle(int[] s) {
int result = 0;
for (int i = 0; i < s.length; i++) {
result ^= s[i];
}
int index1 = getfirstindex(result);
int number = 1 << index1;
int result1 = 0;
int result2 = 0;
for (int i = 0; i < s.length; i++) {
if ((s[i] & number) == 0)
result1 ^= s[i];
else
result2 ^= s[i];
}
System.out.println(" result1 " + result1);
System.out.println(" result2 " + result2);
}
private static int getfirstindex(int result) {
// TODO Auto-generated method stub
int index = 0;
while ((result & 1) == 0 && index < 32) {
index++;
result = result >>> 1;
}
return index;
}
}
本文介绍了一种使用位操作和异或运算来找出数组中只出现一次的两个元素的方法。通过两次异或运算和位操作,算法有效地将数组分成两组,每组包含一个唯一元素,最后输出这两个元素。
9952





