数组中两个只出现一次的数字
2014-09-02 10:39
232 查看
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
算法复杂度O(n) 时间复杂度O(1)
算法复杂度O(n) 时间复杂度O(1)
#include <iostream> using namespace std; void findnum(int* data,int len,int& num1,int &num2) { if (data==NULL) return ; int i=0; int finalnum=0;//保存异或结果 int indexbit=0;//记录第一位是1的位置 //求所有的序列异或的结果,保存在finalnum变量 while(i<len) { finalnum=data[i]^finalnum; i++; } while((finalnum&1)==0&&indexbit<=8*sizeof(int)) { indexbit++;//1的位置左移一位 finalnum=finalnum>>1;//异或结果右移一位 } finalnum=1<<indexbit;//保存1左移indexbit位的数值 for(int i=0;i<len;i++) { if(finalnum&data[i]) num1=num1^data[i]; else num2=num2^data[i]; } /* int tempnum=finalnum; while((tempnum&1)==0&&indexbit<=8*sizeof(int)) { indexbit++; tempnum=tempnum>>1; } tempnum=1<<indexbit; for (int i=0;i<len;i++) { if(tempnum&data[i]) num1=num1^data[i]; else num2=num2^data[i]; } */ } int main() { int num1=0; int num2=0; int a[8]={1,2,2,1,4,5,6,6}; findnum(a,8,num1,num2); cout<<num1<<" "<<num2<<endl; system("pause"); return 0; }
相关文章推荐
- 面试题_找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 微策略2011校园招聘笔试题(找出数组中两个只出现一次的数字)
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 100题_34 找出数组中两个只出现一次的数字
- 【转帖】找出数组中两个只出现一次的数字
- 每天一道算法题10 找出数组中两个只出现一次的数字
- 【每日面试题】找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 找出数组中两个只出现一次的数字 [No. 30]
- 程序员面试题精选100题(34)-找出数组中两个只出现一次的数字
- 程序员面试题精选(54):找出数组中两个只出现一次的数字
- 解题笔记(24)——找出数组中两个只出现一次的数字(数组)
- 找出数组中唯一出现一次的两个数字
- 找出数组中两个只出现一次的数字
- (34)-[转载] 程序员面试题精选100题 -找出数组中两个只出现一次的数字
- [数组]找出数组中两个只出现一次的数字