首页 > 代码库 > 一个数组中只有一个数是只有唯一一个,其他都是三个的,编写一个方法查找出那个唯一的值

一个数组中只有一个数是只有唯一一个,其他都是三个的,编写一个方法查找出那个唯一的值

 1 public class singleThree { 2     /* 3      * 如有数组A[]={2,2,3,2} 4      * 其二进制为 5      * 0 0 1 0 :2 6      * 0 0 1 0 :2 7      * 0 0 1 1 :3 8      * 0 0 1 0 :2 9      * 相加起来为10      * 0 0 4 1 每一位除以3为11      * 0 0 1 1 结果为312      * 当一个数和1进行与运算的时候只取最后一位13      * 如0 0 1 1 & 0 0 0 1 结果为0 0 0 114      * 15      * 如上数组,应该先取数组各数据的最后一个二进制数相加16      * 1.应该把最后一位数相加,第一次应该向右移动0位,相加后为1;17      * result的结果为(w%3)<<(i-1)结果也是为1,从第0位得到的数据为整数,向左移动的位数18      * 其实是计算二进制指定位数的数值,也就是从二进制转换为10进制19      * 2.数组的各数据应计算第二位的二进制数,应该把数组的二进制数向右再移动一位,与1进行与运算得到结果为420      * result=(w%3)<<(i-1),为第二位二进制数的结果,应该和第一位的结果加起来21      * 22      * 23      * */24     public int find(int A[])25     {26         int bits = 4*8;27                   int result=0;28                   for(int i=1; i<=bits; i++)29                  {30                     int w=0;31                     int t=1;32                    33                    for(int j=0; j<A.length; j++)34                        w += (A[j]>>(i-1))&t;35                result+= (w%3)<<(i-1);  //若是除过一个数之外,其他数重复k次,则将此处的3改为k36                 }37                  return result;38             }39 40 41     public static void main(String[] args) {42         // TODO Auto-generated method stub43         int A[]={2,2,3,2};44         singleThree st = new singleThree();45         int num=st.find(A);46         System.out.println(num);47         48     }49 50 }

 

一个数组中只有一个数是只有唯一一个,其他都是三个的,编写一个方法查找出那个唯一的值