题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
方法1:排序+搜索。时间复杂度O(nlogn)
void FindNumsAppearOnce(vector data,int* num1,int *num2) {
sort(data.begin(),data.end());
vectorresult;
int i=0;
while(i
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
int dataxor=data[0];
vector<int> half;
for(int i=1;i<data.size();i++) dataxor^=data[i];
int m=1;
while(!((1<<m)&dataxor)) m++;
for(int i=0;i<data.size();i++) if(data[i]&(1<<m)) half.push_back(data[i]);
*num1=dataxor;
for(int i=0;i<half.size();i++) *num1=*num1 ^ half[i];
*num2=dataxor ^ *num1;
}