时间限制:1秒 空间限制:32768K
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
我的代码
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int* num2) {
//所有数字异或后出现1的那个位置是只出现一次的两个数字出现不同的位置。
int s=data.size();
if(s<2)
return;
int tmp=data[0];
for(int i=1;i<s;i++)
tmp^=data[i];
if(tmp==0)
return;
int count=0;
while((tmp&1)==0){
tmp>>=1;
count++;
}
*num1=0;*num2=0;
for(int i=0;i<s;i++)
if(isOne(data[i],count))
*num1^=data[i];
else
*num2^=data[i];
return;
}
bool isOne(int x,int id){
return (x>>id)&1;
}
};
运行时间:3ms
占用内存:472k
网友评论