题目描述

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

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data, int* num1, int *num2) {

        int len = data.size();

        if (len < 2){
            return;
        }

        int OR=data[0];

        for (int i = 1; i < len; i++){
            OR ^= data[i];
        }

        int bitOneIndex;
        for (int i = 0;; i++){
            if (OR & (1 << i)){
                bitOneIndex = i;
                break;
            }
        }

        *num1 = 0, *num2 = 0;

        for (int i = 0; i < len; i++){
            if (data[i] & (1 << bitOneIndex)){
                *num1 ^= data[i];
            }
            else{
                *num2 ^= data[i];
            }
        }

    }


};