Given an array of numbers nums
, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.
For example:
Given nums = [1, 2, 1, 3, 2, 5]
, return [3, 5]
.
一个数组里存在两个只出现一次的数字,其余的均出现两次,找出那两个数。
对于找出只出现一次的数字,用异或最简单,但是这里有两个,显然全体数组一起异或是不行的。
所以要分组异或,分组的目的是把两个数分别放到两个子数组中,这样异或后的值就是答案。
关键是如何分组,考虑到两个不同的数必然有一位数字不同,假设是第r位不同,那么就可以把第r位是1的分为一组,其余的另成一组,这样两个数字必然在两个组。
接下来是如何找到那个r,解决办法就是全体异或一遍,找到一个值为1的位就可以了。
1 class Solution { 2 public: 3 vector singleNumber(vector & nums) { 4 vector res; 5 if( nums.empty() ) 6 return res; 7 int k = nums[0]; 8 for( int i=1; i<< 1;14 15 vector res1;16 vector res2;17 for( int i=0; i