用异或快速找出不同的数

来源:互联网 发布:数据科学家的职业规划 编辑:程序博客网 时间:2024/06/02 06:57


在一个数组中除1个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这1个数字

/** * 快速找出不同的数 * @param args */public static void main(String[] args) {int[] in = new int[]{9,3,3,4,5,4,5,8,6,6,8};int result = 0;for(int i =0;i<in.length;i++){/** *和0异或等于本身,自己和自己异或等于0 ,异或同一个数两次仍为原数 */result ^= in[i];}System.out.println(result);}


在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字。

public static void main(String[] args) {int[] i = new int[]{7,9,2,2,3,3,4,4,5,5};System.out.println(getDifferent(i));}public static String getDifferent(int[] i){int k = 0;for(int m=0;m<i.length;m++){k ^= i[m];}int n ;for(n=0;n<Integer.toBinaryString(k).getBytes().length;n++){if(((k>>n)&1)==1){break;}}int p=0,q=0;for(int j=0;j<i.length;j++){if(((i[j]>>n)&1)==0){p ^= i[j];}else{q ^= i[j];}} StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("p="+p)   .append(",")   .append("q="+q);return stringBuilder.toString();}