第三题,给一个很大的数组,里面有两个数只出现过一次,其他数都出现过两次,把这两个数找出来。

来源:互联网 发布:mac 关闭照片自动打开 编辑:程序博客网 时间:2024/04/27 14:56

第三题,给一个很大的数组,里面有两个数只出现过一次,其他数都出现过两次,把这两个数找出来。

void getNum(int a[],int length)
{
 int s = 0;//保存异或结果
 for(int i=0;i<length;i++)
 {
  s=s^a[i];
 }
 int temp1 = s;     //临时保存异或结果
 int temp2 = s;     //临时保存异或结果
 int k=0;
 while((temp1&1) == 0)        //求异或结果中位为1的位数
 {
  temp1 = temp1>>1;
  k++;
 }
 for(int i=0;i<length;i++)
 {
  if((a[i]>>k)&1)          //将s与数组中第k位为1的数进行异或,求得其中一个数
  {
   //cout<<a[i]<<" ";
   s=s^a[i];
  }
 }
 cout<<s<<" "<<(s^temp2)<<endl;             //(s^temp2)用来求另外一个数
}

原创粉丝点击