题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。
思路1:先排序,然后遍历整个数组,如果当前数和前边的数以及后边的数都不一样,那么当前数就是只出现了一次的数字,注意考虑边界(只出现一次的数可能在数组第一个也可能出现在数组最后一位)。
思路2:听说可以利用两个数字的逻辑异或来做,这里先只讨论第一种思路,第二种,刷完一遍剑指offer再回来看。
思路1代码:
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
sort(data.begin(),data.end());
int result[2];
int j=0;
if(data[0] != data[1])
{
num1 = &data[0];
}
if(data[data.size()-1] != data[data.size()-2])
{
result[1] = data[data.size()-1];
}
for(int i=1;i<data.size()-1;i++)
{
if(data[i]!=data[i-1] && data[i]!= data[i+1])
{
result[j++] = data[i];
}
}
*num1 = result[0];
*num2 = result[1];
//cout<<*num1<<","<<*num2;
}
};