package java程序员面试笔试宝典;
public class 题8_5_8数组中只出现一次的数字{
public static void main(String[] args) {
int[] a={1,2,2,1,3};
findOnce_0(a,2);
}
//全部移位操作,较好
public static int findOnce_0(int[] a,int n){
int[] bitCount=new int[32];
for (int i = 0; i < bitCount.length; i++) {
for (int j = 0; j < a.length; j++) {
bitCount[i]+=a[j]&1;
a[j]=a[j]>>1;
}
}
int appearOne=0;
for (int i = 0; i < bitCount.length; i++) {
int temp=bitCount[i]%n;
temp=temp<<i;
appearOne+=temp;
}
System.out.println(appearOne);
return appearOne;
}
//最好别用java API,都用C++比较好
public static int findOnce(int[] a){
int[] count=new int[32];
int result=0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < count.length; j++) {
count[j]+=a[i]&1;
a[i]=a[i]>>1;
}
}
StringBuffer sb=new StringBuffer();
for (int i = count.length-1; i >=0; i--) {
count[i]=count[i]%3;
sb.append(count[i]);
}
int n=Integer.parseInt(new String(sb),2);
System.out.println(n);
return n;
}
public static int findNotDouble(int[] a ){
int result=a[0];
for (int i = 1; i < a.length; i++) {
result^=a[i];
}
System.out.println(result);
return result;
}
}