微软100题(61)找出数组中两个只出现一次的数字
2015-06-02 21:55
381 查看
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。
请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
思路:两个相同的数字异或等于量,那么所有数字异或就是这两个数字异或的和
这个异或的和肯定有一位不为零,而且这一位 那两个数字该位上 不一样
请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
思路:两个相同的数字异或等于量,那么所有数字异或就是这两个数字异或的和
这个异或的和肯定有一位不为零,而且这一位 那两个数字该位上 不一样
void FindTheTwoOnceNum(vector<int> data) { int n = data.size(); int answer1 = 0; int answer2 = 0; int temp=0; int j; for (int i=0;i<n;++i) temp ^= data[i]; for (j=0;j<32;j++) if(temp>>j & 0x1) break; for (int i=0;i<n;++i) { if(data[i]>>j & 0x1) answer1 ^= data[i]; else answer2 ^= data[i]; } cout<<"the two once numbers are"<<answer1<<" "<<answer2; }
相关文章推荐
- 用Visual Studio将Objective-C编译为C++
- 2015第23周二
- 大学里迷茫了,就看看这些吧。
- git和svn的区别
- HttpClient基础
- Image Processing using C#
- 【android】初步学习日期选择器的使用
- HTML5 定稿:手机 App 三年内将彻底消失?
- 微软100题(60)在O(1)时间内删除链表结点
- having
- Linux Shell脚本攻略(1.12)
- tomcat启动报错:java.net.BindException: Permission denied <null>:80
- android下基本json串的生成与解析
- (初学日记)repeater动态添加行,保存新增数据
- Python的functools模块
- Android广播BroadcastReceiver 二
- 第二次冲刺会议7
- android中实现记住登录密码的界面
- Mac系统安装Rails
- ChrisRenke/DrawerArrowDrawable源码解析