数组中只出现一次的数字

题目描述

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

代码

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
		int re = 0;
        for (auto d : data) {//对所有元素进行异或
            re ^= d;
        }
        
        int b = 1;
        while ((re & 1) == 0) {//寻找re中位数为1的位置
            b <<= 1;
            re >>= 1;
        }
               
        int re1 = 0, re2 = 0;//对元素分成两组,每组有一个数出现一次
        for (auto d : data) {
            if (d & b) {//在 b=2^k,在k位上为1的一组
                re1 ^= d;
            } else {
                re2 ^= d;
            }
        }
          
       	*num1 = re1;
        *num2 = re2;
    }
};

posted on 2017-03-20 19:35  jec  阅读(97)  评论(0编辑  收藏  举报

导航