题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
C++11(clang++ 3.9)
class Solution { public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { // input check if(data.size() < 2) { // num1, num2 ??? return; } int xor_val = 0; int len = data.size(); for(int i = 0; i < len; i++) { xor_val ^= data[i]; } // find the first 1 bit int shift_index = 0; while(0 == (xor_val & 1)) { xor_val >>= 1; shift_index++; } *num1 = 0; *num2 = 0; // use mask to divide data[] into 2 groups // num1 and num2 will be in different groups int mask = (1 << shift_index); for(int i = 0; i < len; i++) { if(0 == (data[i] & mask)) { *num1 ^= data[i]; } else { *num2 ^= data[i]; } } } };
原文:https://www.cnblogs.com/hotwater99/p/12432922.html