第二十七题 数组中只出现1次的2个数
来源:互联网 发布:bim软件分类 编辑:程序博客网 时间:2024/06/12 23:00
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)
思路:通过位与运算能够求出数组中只出现1次的2个数位与的结果result,按位求出在result中1出现的第一个位置,因为在这个位置上,2个不同的数一个肯定一个为1,一个为0,通过这个方法把整个数组分为2个部分,一个是这个位置为1的,一个是这个位置为0的,获取这个位置数字为1的数相与即可得到第一个只出现1次的数,第二个数类似。
#include <iostream>using namespace std;//获取某个数在a的位置上是否为1bool innone(int num,unsigned int a){num=num>>a;return(num&1);}//求取num中第一个二进制位上为1的位置int whereposition(int num){int index=0;while (((num & 1) == 0) && (index < 32)){num = num >> 1;++ index;}return index;}//计算出2个不同的值void cout2othernumindata(int data[],int length,int &num1,int &num2){if (data==nullptr){return;}int result=0;for (int i=0;i<length;++i){//位与运算得到2个不同的数的与值result=result^data[i];}int index=whereposition(result);for (int i=0;i<length;++i){if (innone(data[i],index)){//第一个不同的数num1=num1^data[i];}else{//第二个不同的数num2=num2^data[i];}}}int main(){int data[10]={1,2,3,4,5,4,3,2,6,1};int num1=0;int num2=0;cout2othernumindata(data,sizeof(data)/sizeof(int),num1,num2);cout<<num1<<endl;cout<<num2<<endl;return 0;}
0 0
- 第二十七题 数组中只出现1次的2个数
- 数组中只出现1次的两个数字
- 数组中只出现1次的两个数字
- 求整型数组中只出现1次的数字
- 数组中只出现1次的两个数字
- 数组中只出现1次的两个数字
- 数组中只出现1次的数字
- 数组中只出现1次的两个数字
- 找出数组中只出现一次的2个数
- 找出数组中只出现一次的2个数
- 找出数组中只出现一次的2个数
- 找出数组中只出现一次的2个数
- 数组中只出现一次的2个数
- 找出数组中2个只出现1次的数,其他数都出现2次
- 找出数组中2个只出现1次的数,其他数都出现2次
- 找出数组中只出现一次的2个数(类型题总汇)
- 在一个数组中除两个数字只出现1次外,其它数字都出现了2次
- 数组中只出现1次的两个数字(百度面试题) .
- 中山大学 CSU 1391
- Chromium文本选择放大镜
- sqlserver 死锁总结
- S3C2440内部集成了一个Nand flash控制器
- WaitHandle
- 第二十七题 数组中只出现1次的2个数
- 题目1022:游船出租
- say something to myself at a moment like this
- MariaDb数据库管理系统学习(一)安装过程图解
- C#中Dispose和Close的区别!
- 基于Flex移动和ArcGIS API for Flex开发移动GIS应用
- 关于java中的编码问题
- iOS 在 ARC 环境下 dealloc 的使用、理解误区
- iOS 字符串转码+解压