首页 > 代码库 > 一个数组中只有一个数是只有唯一一个,其他都是三个的,编写一个方法查找出那个唯一的值
一个数组中只有一个数是只有唯一一个,其他都是三个的,编写一个方法查找出那个唯一的值
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 }
一个数组中只有一个数是只有唯一一个,其他都是三个的,编写一个方法查找出那个唯一的值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。