您的位置:首页 > 职场人生

【每日面试题】找出数组中两个只出现一次的数字

2012-03-10 18:46 351 查看
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
代码:
int firstNotDouble(int a[],int n)

{

if(n<1)

return -1;

int result=a[0];

for(int i=1;i<n;i++)

result^=a[i];

return result;

}

void findTwoNotDouble(int a[],int n,int& one,int& two)

{

int x=firstNotDouble(a,n);

int y=1;

for(;y<=x;y<<=1)

{

if(y&x)

break;

}

for(int i=0;i<n;i++)

{

if(y&a[i])

one^=a[i];

else

two^=a[i];

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐