您的位置:首页 > Web前端

【剑指offer系列】 数组中只出现一次的数字___40

2016-04-11 10:30 281 查看
  题目描述:

  一个数组中除了两个数字只出现了一次外,其它数字都出现了两次。找出这两个数

  

  示例:

  输入:{2 ,4 ,3 ,6 ,2 ,3}

  输出:4,6

  

  分析:

  可以利用相同数字异或为0的思想进行查找

  

  代码:   

bool isSet(int num,int bit){
return (num&(1<<bit))>0;
}
int getLastBit(int num){
int bit=0;
while(bit<32&&num&(1<<bit)==0){
++bit;
}
return bit;
}
void onlyOnce(vector<int> nums){
if(nums.size()<=1)  return;
int num=0;
for(int i=0;i<nums.size();++i){
num^=nums[i];
}
int bit=getLastBit(num);
int num1=0,num2=0;
for(int i=0;i<nums.size();++i){
if(isSet(nums[i],bit))  num1^=nums[i];
else    num2^=nums[i];
}
cout<<num1<<"\t"<<num2<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: