zoukankan      html  css  js  c++  java
  • 一个数组中只有一个数是只有唯一一个,其他都是三个的,编写一个方法查找出那个唯一的值

     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 }
  • 相关阅读:
    个人介绍
    实验三
    第二次实验
    实验一
    ATM管理系统
    第二次作业
    实验四 决策树算法及应用
    实验三 朴素贝叶斯算法及应用
    实验二 K-近邻算法及应用
    实验一 感知器及其应用
  • 原文地址:https://www.cnblogs.com/luoweiKnowledge/p/3959324.html
Copyright © 2011-2022 走看看