数组中只出现一次的数字
Desicription
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class Solution { public: void FindNumsAppearOnce(const vector<int>& data, int* num1, int* num2) { int andNumber = 0; for(auto number : data) { andNumber ^= number; } int index = 0; while(andNumber ^ 1) { andNumber >>= 1; index++; } vector<int> partA; vector<int> partB; for(auto number : data) { if((number >> index) & 1) { partA.emplace_back(number); } else { partB.emplace_back(number); } } andNumber = 0; for(auto number : partA) { andNumber ^= number; } *num1 = andNumber; andNumber = 0; for(auto number : partB) { andNumber ^= number; } *num2 = andNumber; } };
|