数组中只出现一次的数字

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

思路:位运算,第一次把所有数求异或得到 两个所求数字 的异或结果。此结果一定不为0,即所求两个数在某位一定一个为0,一个为1。根据此位是否是1将数组划分成两部分,分别对每部分求异或,划分后两部分各自只有一个数出现一次,所以用异或可以分别得出两部分的两个数。

 

//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
  public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
        int x1=0,x2=0;
       //x1是两个要找的数异或结果
         for(int cur:array)
               x1^=cur;
        //temp是两个数最低不同那位为1,其余都是0
        int temp=x1&(~x1+1);
        for(int cur:array){
            if((cur&temp)!=0){
                x2^=cur;
            }
        }
        num1[0]=x2;
        num2[0]=x1^x2;
            
        }

 

posted @ 2017-04-10 14:38  雪浪snowWave  阅读(145)  评论(0编辑  收藏  举报