LeetCode Single Number III (xor)

 

 

题意:

  给一个数组,其中仅有两个元素是出现1次的,且其他元素均出现2次。求这两个特殊的元素?

 

 

思路:

  跟查找单个特殊的那道题是差不多的,只是这次出现了两个特殊的。将数组扫一遍求全部元素的异或和 x,结果也就是这两个特殊的元素的异或和了。现在必须找到两个当中的一个,才能恢复出另外一个。注意到x的二进制位中必定有1,那么只需要找到其中任意一个1对应的整数,再将数组中所有该位为1的计算他们的异或和a,a就是结果了,而另一个数b=x^a。

 

 

1 vector<int> singleNumber(vector<int>& nums) {
2     int x=0;
3     for(int i=0; i<nums.size(); i++)    x^=nums[i];
4     int lowbit=x-(x&(x-1)), a=0;
5     for(int i=0; i<nums.size(); i++)
6         if( lowbit & nums[i] )    a^=nums[i];
7     return vector<int>{a,x^a};
8 }
AC代码

 

posted @ 2015-10-28 21:13  xcw0754  阅读(166)  评论(0编辑  收藏  举报