面试题---找出数组中两个只出现一次的数
2018-06-17 23:00:19来源:未知 阅读 ()
题目描述:给一个数组,里面有两个数只出现一次,其它的数都出现两次,请找出这两个数;
样例:输入 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; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的 2020-04-15
- [题记-数学-面试题]约瑟夫环-leetcode 2020-03-30
- 小游戏二之---------------五子棋 2020-03-23
- C++ 静态成员----细谈static修饰的成员 2020-03-19
- 数据结构---二叉搜索树 2020-02-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash