找出数组中两个只出现一次的数字
来源:互联网 发布:网吧手机支付vb程序 编辑:程序博客网 时间:2024/05/16 01:46
原博客地址: 找出数组中两个只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
还是理解不够深刻。
这题的主要思路还是之前的数组中只出现一次的数字的那种模式,一次遍历加上异或运算。那么这个异或的值肯定是这两个只出现一次的数字的相异或的值。那么这个值的二进制表现形式中的1的结果就表示这两个数字在该bit位上不一样。那么通过此举,我们可以以这个bit位是否为1来从整个数组中把这两个只出现一次的数字分开。
通过此举,别的出现两次的数字一会被分到同一组,那么结果就是有两组数据,每组都是奇数个数字,都有只出现一次的数字。
#include<stdio.h>#include<assert.h>int findOutTwo(int *a,int n,int &x,int &y){ assert(a); assert(n>2); int result=a[0]; for(int i=1;i<n;++i) result^=a[i]; int b=result&-result; x=0; y=0; for(int i=0;i<n;++i) { if(b&a[i]) x^=a[i]; else y^=a[i]; } return 0;}int main(){ int a[]={1,1,2,2,3,3,4,4,5,6}; int x,y; findOutTwo(a,sizeof(a)/sizeof(int),x,y); printf("%d %d\n",x,y); getchar(); return 0;}
结果为:
0 0
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字--总结
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- fullPage 使用总结
- Similarity of Social Media Network
- C 编译、链接、加载
- 编译mjpg-streamer input_uvc 错误 linker input file unused because linking not done
- 覆盖网Overlay Network概述
- 找出数组中两个只出现一次的数字
- switch的用法(用到头文件Windows中的MessageBoxA和ShellExecuteA)
- 编程规范
- Random Graph Model
- Ubuntu 14.04 LTS (Trusty Tahr) 64 bits安装opencv3.0.0beta
- 费马小定理
- Jpgraph的基本使用
- 渐进符号
- 在cygwin环境下程序崩溃如何产生core文件