面试题---找出数组中两个只出现一次的数
2017-03-23 21:02
302 查看
题目描述:给一个数组,里面有两个数只出现一次,其它的数都出现两次,请找出这两个数;
样例:输入 2 4 2 7 4 9
输出 7 9
思路:假定要找出的这两个数为x、y 把所有的数异或,结果是x与y异或的值,那么肯定不为0,那么这个值的二进制至少有一位为1,也就是说x和y的二进制在这一位上必定一个为0,一个为1,那么可以根据这一位把这个数组分成两个数组,x和y在不同的数组里,接下来对每个数组直接异或出的值就是结果了;
代码如下:
样例:输入 2 4 2 7 4 9
输出 7 9
思路:假定要找出的这两个数为x、y 把所有的数异或,结果是x与y异或的值,那么肯定不为0,那么这个值的二进制至少有一位为1,也就是说x和y的二进制在这一位上必定一个为0,一个为1,那么可以根据这一位把这个数组分成两个数组,x和y在不同的数组里,接下来对每个数组直接异或出的值就是结果了;
代码如下:
#include <iostream> #include <cstdio> using namespace std; int num1,num2; int singleNumber(int nums[],int length) { num1=num2=0; if(length<2) return -1; int re=0; for(int i=0;i<length;i++) re^=nums[i]; int ind=0; while((re&1)==0&&(ind<8*sizeof(int))) { re=re>>1; ++ind; } for(int j=0;j<length;++j) { int t=(nums[j]>>ind)&1; if(t) num1^=nums[j]; else num2^=nums[j]; } } int main() { int nums[100]={2,4,2,7,4,9}; singleNumber(nums,6); cout<<num1<<" "<<num2<<endl; return 0; }
相关文章推荐
- 面试题_找出数组中两个只出现一次的数字
- 程序员面试题精选100题(34)-找出数组中两个只出现一次的数字
- 【每日面试题】找出数组中两个只出现一次的数字
- (34)-[转载] 程序员面试题精选100题 -找出数组中两个只出现一次的数字
- 程序员面试题精选100题(34)-找出数组中两个只出现一次的数字
- 一个整型数组里除了两个数字之外,其它的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 找出数组中两个只出现一次的数字 [No. 30]
- 【算法14】找出数组中两个只出现一次的数字
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
- 算法题6 找出整数数组中两个只出现一次的数字
- 每天一道算法题10 找出数组中两个只出现一次的数字
- 解题笔记(24)——找出数组中两个只出现一次的数字(数组)
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 程序员面试100题之三十四,找出数组中两个只出现一次的数字
- 每天一道算法题10 找出数组中两个只出现一次的数字
- 程序员面试题精选(54):找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 面试题精选:找出数组中只出现一次的3个数
- 微策略2011校园招聘笔试题(找出数组中两个只出现一次的数字)