算法复习:数组中只出现一次的数字
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
解题思路
看到这个题目想到的最简单的思路是:使用HashMap将数字和次数存起来,再遍历一遍判断是否是两次即可,但是这种思路显然不是出题者想要的解法。
所以可以从“2次”思考,两个数的什么操作可以识别出是否相同?对了。异或!任何一个数字异或它自己都等于0!
但是问题又来了,数组里有两个不同的数字,假如是一个的话就可以直接得到结果,可是两个的话就是两个不相同的数字的异或的结果。
继续从这个结果入手,可以先找出这个异或结果的第一个1,这样就可以从数组中把这两个数分开,因为相同的两个数字同一位肯定是一样的,再将两组分别异或即可得答案。
代码如下: