剑指Offer_编程题——数组中只出现一次的数字
题目描述:
一个整型数组里除了两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。
具体要求:
时间限制: C/C++ 1秒,其他语言2秒
空间限制: C/C++32M,其他语言64M
具体实现:
思路一:
如果把数组中的所有数字都依次异或一遍,则可以消掉成对出现的数字,那么还有两个数字是单一的,肯定也不同,那么最终异或的结果肯定不是0。表示在二进制中肯定有一位是1,那么两个不同的数字,一定有一个在该位为1,另一个在该位为0。如果将整个数组按照该位是否为1分为两部分,那么这两部分各自包含一个单一数字。这里实现这个就需要设置一个flag标志位,通过对其**左移动来实现。flag<<= 1;或者是flag=flag*2;分为两部分的数组,分别异或,最终结果就是这两个数。这里需要注意的是这个flag就是我们一个额外的条件,按照条件查找,边查找,边异或就行了。具体用Java实现如下: