34.数字中只出现一次的数字
题目内容:
代码及思路:
以整型数组{2,4,3,6,3,2,5,5}为例,数组中只有数字4和6只出现一次,剩下的数字都出现2次。
#include<iostream>
#include<vector>
using namespace std;
class Solution
{
public:
void FindNumsAppearOnce(vector<int> data, int* num1, int* num2)
{
if (data.empty())
return;
//对每个数字依次进行异或
int current = 0;
for (int i = 0; i < data.size(); i++)
{
current ^= data[i];
}
unsigned int indexof1 = FindIndexOf1(current); //找到数值为1的位置
*num1 = *num2 = 0;
//对数组中indexof1这一位为1的或为0的分成两组
for (int i = 0; i < data.size(); i++)
{
if (Isbit1(data[i], indexof1) ) //indexof1位为1的数字
{
*num1 ^= data[i];
}
else
{
*num2 ^= data[i];
}
}
}
unsigned int FindIndexOf1(int num)
{
unsigned int index = 0;
//只有当那个为的数值为 1时才有与1相与不为0
while (((num & 1) == 0) &&(index<8*sizeof(int)))
{
num = num >> 1;
index++;
}
return index;
}
bool Isbit1(int num, unsigned int& indexof1)
{
num = num >> indexof1;
return (num & 1);
}
};
void main()
{
Solution* object = new Solution;
vector<int> data;
int num;
char ch;
int num1, num2;
do
{
cin >> num;
data.push_back(num);
cin.get(ch);
} while (ch == ',');
object->FindNumsAppearOnce(data, &num1, &num2);
cout << num1 << endl;
cout<<num2 << endl;
}