算法复习:数组中只出现一次的数字

来源:互联网 发布:minecraft0.15js 编辑:程序博客网 时间:2024/06/04 19:25

题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

 

解题思路

看到这个题目想到的最简单的思路是:使用HashMap将数字和次数存起来,再遍历一遍判断是否是两次即可,但是这种思路显然不是出题者想要的解法。

所以可以从“2次”思考,两个数的什么操作可以识别出是否相同?对了。异或!任何一个数字异或它自己都等于0!

但是问题又来了,数组里有两个不同的数字,假如是一个的话就可以直接得到结果,可是两个的话就是两个不相同的数字的异或的结果。

继续从这个结果入手,可以先找出这个异或结果的第一个1,这样就可以从数组中把这两个数分开,因为相同的两个数字同一位肯定是一样的,再将两组分别异或即可得答案。

 

代码如下:

 

原创粉丝点击