假设一数组:数组中有两个元素只出现一次,其它数据均出现两次,怎么在o(n)时间复杂内 找出那两个数 开始想用Hash,不过异或一次后就是那两个只出现一次的数据的异或结果,,然后取出异或结果中二进制出现1的一位, 从而把数据分成两半。分别异或然后得出结果。 测试程序: int main(int argc, char* argv[]) { int a[]={1,2,3,1,3,4,5,5};//测试数据 int temp=0; int len=sizeof(a)/sizeof(a[0]); for(int i=0;i<len;i++) { temp^=a[i]; } int flag=1; while(1){ if((temp&1)!=0) break; else {flag<<=1;temp>>=1;} } int result1=0;//两个结果 int result2=0;
for(i=0;i
} 最终输出结果:4 2