首页 > 代码库 > 面试题40:数组中只出现一次的数字
面试题40:数组中只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
1 void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { 2 if(data.size()<=1) 3 return; 4 int resultXOR = 0; 5 for(int i=0;i<=data.size()-1;i++) 6 resultXOR^=data[i]; 7 int indexOf1 = FindFirstBits1(resultXOR); 8 *num1=*num2=0; 9 for(int j=0;j<=data.size()-1;j++){10 if(isBit1(data[j],indexOf1))11 *num1^=data[j];12 else13 *num2^=data[j];14 }15 }16 17 int FindFirstBits1(int num){18 int count=0;19 while((0x1&num)==0){20 num=num>>1;21 count++;22 }23 return count;24 25 }26 27 bool isBit1(int num,int indexBit){28 num=num>>indexBit;29 return (num&0x1);30 }
面试题40:数组中只出现一次的数字
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。