【面试题】剑指Offer-40-数组中只出现一次的数字
来源:互联网 发布:北京行知园地址 编辑:程序博客网 时间:2024/05/21 06:56
题目概述
解题思路
我们知道,一个数和自己异或的结果是0
如果这个整形数组中只有一个数字出现一次的话,全部异或后的结果就是出现一次的数字
由于这道题目是两个数字a,b出现了一次,我们也可以将所有的数进行异或
得到的结果就是a,b异或的结果ret
此时,我们可以根据ret的二进制中任何一位数字为1将整形数组分成两组
a,b就分别处于这两组之中
然后分别对两组进行所有数字异或
这样便可以求出结果
代码实现
#include<iostream>using namespace std;#include<vector>//找数组中有两个数只出现了一次void FunNumApperanceOnce(vector<int>& v, int& num1, int& num2){if (v.size() <= 2)return;int ret = 0;//找出所有数字亦或之后的结果vector<int>::iterator it = v.begin();while (it != v.end()){int num = *it;ret = ret^num;++it;}//判断最右边的1是第几位size_t i = 0;for (; i < 32; ++i){if ((ret << i) & 1 == 1)break;}//根据位数分成两组,分别求出两个出现一次的数字it = v.begin();while (it != v.end()){int num = *it;if (num&(1 << i) == 1){num1 ^= num;}else{num2 ^= num;}++it;}}
1 0
- [剑指offer][面试题40]数组中只出现一次的数字
- [剑指offer]面试题40:数组中只出现一次的数字
- [剑指offer]面试题40:数组中只出现一次的数字
- 剑指Offer:面试题40 数组中只出现一次的数字
- 剑指offer 面试题40—数组中两个只出现一次的数字
- 《剑指Offer》学习笔记--面试题40:数组中只出现一次的数字
- 【剑指Offer学习】【面试题40:数组中只出现一次的数字】
- 剑指offer面试题40-数组中只出现一次的数字
- 剑指offer-面试题40:数组中只出现一次的数字
- 剑指offer之面试题40数组中只出现一次的数字
- 剑指offer面试题40:数组中只出现一次的数字
- 剑指Offer面试题40:数组中只出现一次的数字 Java实现
- 剑指offer--面试题40:数组中只出现一次的数字
- 剑指offer——面试题40:数组中只出现一次的数字
- 剑指offer-面试题40-数组中只出现一次的数字
- 【剑指offer】面试题40-数组中只出现一次的数字
- 剑指Offer系列-面试题40:数组中只出现一次的数字
- 剑指offer-面试题40 : 数组中只出现一次的两个数字
- Unity 创建Kinect 动作检测实时监控波形图
- 运维笔记43 使用saltstack配置完整线上服务(haproxy+keepalived,nginx+php+memcache,mysql主从)
- DefaultDispatcherErrorHandler: Exception occurred during processing request
- 偏最小二乘回归(PLSR)算法原理
- 数组中出现次数超过一半的数字
- 【面试题】剑指Offer-40-数组中只出现一次的数字
- 如何在虚拟机中添加设备
- 课堂笔记
- LiteOS学习第四篇——任务创建
- JAVA第一周,信号报告
- Linux下用户组、文件权限复习
- jQueryUI中Datepicker(日历)插件的介绍和使用
- SSL P2646 线段树练习题三
- Lintcode 主元素 III