剑指offer-数组中只出现一次的数字
来源:互联网 发布:说明书排版用什么软件 编辑:程序博客网 时间:2024/06/05 02:39
题目为一个数组中除了两个数字以外,其它数字都出现过两次,怎么样找出这两个数字呢?
想这个问题时,因为强调了出现两次和一次,其实是可以想到异或算法的,异或算法就是两个数相同为0,不同为1,那么这道题可以先对输入数据整体求一个异或,那么根据异或结果可以将数组分为两个部分,比如说异或结果为0010,则可以根据倒数第二位为1和不为1将数据分为两组,这两组中分别含有一个不重复的数字,对每一组分别做异或,就可以找到不重复数字的两个数。
int once_search(int a[], int n, int &num1,int &num2){if (a == NULL || n < 2)return -1;int allor = 0;for (int i = 0; i < n;i++){allor ^= a[i];//得到整体异或结果}unsigned int resultor = findfirstsee(allor);num1 = num2 = 0;for (int j = 0; j < n; j++){if (isbit(a[j], resultor)){num1 ^= a[j];}elsenum2^= a[j];}return num1, num2;}unsigned int findfirstsee(int allor){int indexbit = 0;while (((allor & 1) == 0) && (indexbit < 8 * sizeof(int))){allor = allor >> 1;++indexbit;}return indexbit;}bool isbit(int number, unsigned int resultor){number = number >> resultor;return(number & 1);}
0 0
- 剑指offer--数组中只出现一次的数字
- 剑指Offer之 - 数组中只出现一次的数字
- [剑指Offer]40.数组中只出现一次的数字
- 剑指offer-40 数组中只出现一次的数字
- 剑指offer 数组中只出现一次的数字
- 剑指offer 40-数组中只出现一次的数字
- 《剑指offer》数组中只出现一次的数字
- 剑指offer—数组中只出现一次的数字
- 【剑指offer】之数组中只出现一次的数字
- [剑指offer-1351]数组中只出现一次的数字
- 剑指offer:数组中只出现一次的数字
- 剑指offer 40 数组中只出现一次的数字
- 剑指offer:数组中只出现一次的数字
- 剑指offer 数组中只出现一次的数字
- [剑指offer]数组中只出现一次的数字
- 剑指Offer--040-数组中只出现一次的数字
- 剑指offer—数组中只出现一次的数字
- 《剑指offer》:[40]数组中只出现一次的数字
- 捡框架的小男孩--Spring(二)
- 项目知识点
- Services
- 一步一步学springboot (七)集成mybatis及druid数据源
- 使用全注解配置Spring MVC
- 剑指offer-数组中只出现一次的数字
- swustoj哈特13的235(1121)
- 关于JQ的AJAX
- 流光人物效果
- C#WebForm实现增删改查
- Android时间与服务器同步方法
- java语言基础(43)——带包名的类编译和运行
- 文件的拷贝
- 【deeplab】Semantic Image Segmentation with Deep Convolutional Nets and Fully