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

  题目描述:
  一个数组中除了两个数字只出现了一次外,其它数字都出现了两次。找出这两个数
  
  示例:
  输入:{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;
}

你可能感兴趣的:(【剑指offer系列】 数组中只出现一次的数字___40)