剑指offer 面试题40 数组中出现一次的两个数

来源:互联网 发布:管家婆默认数据备份 编辑:程序博客网 时间:2024/06/03 21:48


#include <iostream>using namespace std;bool InvalidInput=false;void FindSingleNum(int* num,int len,int* single1,int* single2){InvalidInput=false;if(!num||len<2||!single1||!single2){InvalidInput=true;return;}//Xor all numbers and get lowest "1" bit. //e.g.00001000,Last1Bit=00001000int AllXor=0;for(int i=0;i<len;++i)AllXor^=num[i];int Last1Bit=0;Last1Bit=AllXor-(AllXor&(AllXor-1));int res1=0,res2=0;for(int i=0;i<len;++i){if(num[i]&Last1Bit)res1^=num[i];elseres2^=num[i];}*single1=res1;*single2=res2;}int main(){int num[]={1};int single1,single2;FindSingleNum(num,sizeof(num)/sizeof(*num),&single1,&single2);if(InvalidInput) cout<<"Invalid Input.";else cout<<single1<<single2;}


0 0
原创粉丝点击