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

 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 结果为3
12      * 当一个数和1进行与运算的时候只取最后一位
13      * 如0 0 1 1 & 0 0 0 1 结果为0 0 0 1
14      * 
15      * 如上数组,应该先取数组各数据的最后一个二进制数相加
16      * 1.应该把最后一位数相加,第一次应该向右移动0位,相加后为1;
17      * result的结果为(w%3)<<(i-1)结果也是为1,从第0位得到的数据为整数,向左移动的位数
18      * 其实是计算二进制指定位数的数值,也就是从二进制转换为10进制
19      * 2.数组的各数据应计算第二位的二进制数,应该把数组的二进制数向右再移动一位,与1进行与运算得到结果为4
20      * 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改为k
36                 }
37                  return result;
38             }
39 
40 
41     public static void main(String[] args) {
42         // TODO Auto-generated method stub
43         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 }

 

posted on 2014-09-06 12:28  daocaorendeshijie  阅读(501)  评论(0编辑  收藏  举报

导航