剑指offer题解 数组中只出现一次的数字

来源:互联网 发布:3dsmax2014软件许可证 编辑:程序博客网 时间:2024/05/01 06:29

题目描述

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

//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果public class Solution {    public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {        if(array.length<2) {            return;        }        int result=0;        for(int i=0;i<array.length;i++){            result^=array[i];        }        int n=0;        int num=1;        int count=0;        while(result>0){            if((result&num)>0){                break;            }            num=num<<1;            count++;        }        int left=0;        int right=0;        for(int i=0;i<array.length;i++){            if(isBit1(array[i],count)){                left^=array[i];            }else{                right^=array[i];            }        }        num1[0]=left;        num2[0]=right;    }    boolean isBit1(int num,int n){        int temp=1;        while(n>0){            temp=temp<<1;            n--;        }        return (temp&num)!=0;    }}
0 0