数组中只出现一次的数字

来源:互联网 发布:人工智能的利弊 编辑:程序博客网 时间:2024/06/03 21:09

题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果public class Solution {    public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {        if(array==null||array.length==1){            num1[0]=0; num2[0]=0;            return;        }        int a1=0,a2=0;        //计算分组标志k        int yh=0;        for(int i=0;i<array.length;i++){            yh=yh^array[i];        }        int k=getLastBit1(yh);        //开始分组,并计算        for(int i:array){            if(isKBit1(i,k)){                a1^=i;            }else{                a2^=i;            }        }        num1[0]=a1;        num2[0]=a2;    }    //获取最后一个1对应的数值 倒数第三位 2^3=8;    private int getLastBit1(int num){        int temp=num&(num-1);        return num-temp;    }    //8^a=8 判断分割到哪一个组    private boolean isKBit1(int num,int k){        if((num&k)==k) return true;        return false;    }}
0 0