基于visual Studio2013解决面试题之0608找出两个只出现一次的数
来源:互联网 发布:飞鸟各投林 知乎 编辑:程序博客网 时间:2024/05/17 21:42
题目
解决代码及点评
/* 已知数组中有两个数只出现一次,其他成对出现,请找出这两个数 解决办法: 1)简化问题,如果数组中只有一个数出现一次,那么只要对这个数组做异或即可 2)所以这个问题的根本是,怎么把这两个数分开在两组里,这两组数据都有问题1)的特点 3)再分别找出这两个数 分组办法: 1)将所有数据做异或,那么这个结果相当于两个只出现一次的那个值的异或 2)在这个结果里,找出某个位置为1的位 3)根据这个位的值,将数组分成两组,一组是该位为0,一组该位为1 这种分法,把两个不同的值分在两组,并且两组中其他的数是成对出现的*/#include <iostream>using namespace std;void find(int s[],int len){ if(len<2) return; // 将所有元素的异或值保存在xResult int xResult = s[0]; for (int i = 1; i < len; ++i) { xResult ^= s[i]; } // 并且保存在aResult和bResult,最后aResult和bResult将会输出不同的两个数 int aResult = xResult, bResult = xResult; // 计算哪个位为1 int bit = 0; while (!(bResult & (1 << bit))) ++bit; // 通过该位得到一个该位为1的数,这个数将把整个数组分成两部分 int andValue = 1 << bit; for (int i = 0; i < len; ++i) { // 如果数组中某个数,该位为1,则与aResult做异或 if (s[i] & andValue) aResult ^= s[i]; // 否则与bResult做异或,这样相当于将数组分成两部分了 else bResult ^= s[i]; } // 输出结果 cout << aResult << " " << bResult << endl;}// 测试主函数int main() { int s[]={1,2,7,4,5,4,5,2,6,1}; int len=sizeof(s)/sizeof(int); find(s,len); system("pause"); return 0;}
代码下载及其运行
代码下载地址:http://download.csdn.net/detail/yincheng01/6704519
解压密码:c.itcast.cn
下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:
1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”
2)在下拉框中选择相应项目,项目名和博客编号一致
3)点击“本地Windows调试器”运行
程序运行结果
0 0
- 基于visual Studio2013解决面试题之0608找出两个只出现一次的数
- 基于visual Studio2013解决面试题之0306打印第一次只出现一次的字符
- [各种面试题] 找出三个只出现一次的数
- 找出只出现一次的两个数
- 找出两个只出现一次的数
- 【经典面试题】给一组数,只有两个数只出现了一次,其他所有数都是成对出现的。怎么找出这两个数
- 基于visual Studio2013解决面试题之0510连续数之和
- 基于visual Studio2013解决面试题之0701寻找丑数
- 基于visual Studio2013解决面试题之0808寻找中间数
- 基于visual Studio2013解决面试题之0908最大连续数字串
- 基于visual Studio2013解决面试题之0201二叉树转链表
- 基于visual Studio2013解决面试题之0203栈实现
- 基于visual Studio2013解决面试题之0205查找路径
- 基于visual Studio2013解决面试题之0207单词翻转
- 基于visual Studio2013解决面试题之0202上下排
- 基于visual Studio2013解决面试题之0301累加
- 基于visual Studio2013解决面试题之0303数组求和
- 基于visual Studio2013解决面试题之0308Fibonacci数列
- MFC界面编程技术汇总
- Xcode
- 黑马程序员-system
- 10--java-静态导入、枚举、反射
- jsp的4种会话跟踪技术
- 基于visual Studio2013解决面试题之0608找出两个只出现一次的数
- poj 1797 Heavy Transportation
- android:activity 生存周期
- Java使用memcached
- 基于visual Studio2013解决面试题之0609寻找链表公共节点
- Linux查看CPU和内存使用情况
- Zend内存管理器
- the QlistWidght tutorial
- KMP算法之我见(加深与优化)