剑指offer-数组中只出现一次的数
来源:互联网 发布:人工智能优缺点 编辑:程序博客网 时间:2024/06/12 22:18
题目:一个整形数组中出了两个数字之外,其他的数字都出现了两次,请写程序找出这两个只出现了一次的数字,要求时间复杂度为O(n),空间复杂度为O(1)。
用异或知识解答,一个数异或本身结果为0,所以遍历整个数组,数组中所有数组相异或,相同数字相异或相抵消,结果为0,则最后结果为两个不同的数相异或的值。
保存最后所得值,以该值最后一位为标准,将数组分成两组,0一组,1一组,则两个不同的数字被分到不同组,再次将同一组数据相异或,则最后剩下数据为出现一次的数字。
bool IsBit(int num,int index){num>>=index;//右移return (num&1);}void FindNumApperOnce(vector <int> data,int *num1,int *num2){//给定一个数组,首先判断该数组是否为空;int temp=data[0];int size=data.size();if(size<2)return;for(int i=0;i<size;i++){temp^=data[i];//数组元素全部异或,最后temp为出现一次的数异或的结果;}int index=0;while((temp&1==0))//判断最后一位是否为0{index++;//&运算,全1为0,有0则0;} *num1=*num2=0;while (i<size){if(IsBit(data[i],index)){*num1^=data[i];}else{*num2^=data[i];}}}
阅读全文
0 0
- 剑指offer-数组中只出现一次的数
- 剑指Offer 面试题40:数组中只出现一次的两个数 题解
- 剑指offer——数组中只出现一次的数
- 剑指offer--数组中只出现一次的数字
- 剑指Offer之 - 数组中只出现一次的数字
- [剑指Offer]40.数组中只出现一次的数字
- 剑指offer-40 数组中只出现一次的数字
- 剑指offer 数组中只出现一次的数字
- 剑指offer 40-数组中只出现一次的数字
- 《剑指offer》数组中只出现一次的数字
- 剑指offer—数组中只出现一次的数字
- 【剑指offer】之数组中只出现一次的数字
- [剑指offer-1351]数组中只出现一次的数字
- 剑指offer:数组中只出现一次的数字
- 剑指offer 40 数组中只出现一次的数字
- 剑指offer:数组中只出现一次的数字
- 剑指offer 数组中只出现一次的数字
- [剑指offer]数组中只出现一次的数字
- JDBC学习入门
- git workflow常用命令
- github概念和实战
- Spring事务传播机制和数据库隔离级别
- Unity 可用预处理表
- 剑指offer-数组中只出现一次的数
- design pattern及其使用
- 王道霸道
- layer-list -- layer-list的基本使用介绍
- website architecture
- website project team member 角色及开发过程概念图
- 偏执狂
- 查快递并保存信息方法
- web开发workflow