Single Number

1、Single Number I

 1 class Solution {
 2 public:
 3     int singleNumber(vector<int>& nums) {
 4         if(nums.size()==0) return NULL;
 5         int res=nums[0];
 6         for(int i=1;i<nums.size();i++)
 7         {
 8             res^=nums[i];
 9         }
10         return res;
11     }
12 };

2、Single Number II

int 共有32位,假设把所有的数相加,则并且每位上产生的进位不累计进入其他位:

    因为一共只有一位个数为1,其他位个数都为3,则这些数相加,每位上累计个数取余3为0,或者1,最后把这位合并就是个数为1 的数。

   这种做法可以通用,并且只用了两个变量。

 1 class Solution {
 2 public:
 3     int singleNumber(vector<int>& nums) {
 4         int result = 0;
 5         int count =0 ;
 6         for(int i=0; i<32; i++)
 7         {
 8             count =0;
 9             for(int j=0; j<nums.size(); j++)
10                   count += (nums[j]>>i)&1;
11             result |= (count%3)<<i;
12         }
13              return result;
14     }
15 };

3、Single Number III

 1 class Solution {
 2 private:
 3     int last1(int n)
 4     {
 5           int i=0;
 6           while(((n>>i)&1) == 0)
 7           {
 8               i++;
 9           }
10           return i;
11     }
12     bool isRange(int n, int i)
13     {
14         if(((n>>i)&1) ==1)
15             return true;
16         else return false;
17     }
18 public:
19     vector<int> singleNumber(vector<int>& nums) {
20             vector<int> res;
21             if(nums.size()<2)
22                   return res;
23             int num = 0;
24             for(int i=0; i<nums.size(); ++i)
25             {
26                  num = num^nums[i];
27             }
28             int n = last1(num);
29             int a=0, b=0;
30             for(int j=0; j<nums.size(); ++j)
31             {
32                 if(isRange(nums[j], n))
33                 {
34                      a = a^nums[j];
35                 }
36                 else
37                 {
38                      b = b^nums[j];
39                 }
40             }
41             res.push_back(a);
42             res.push_back(b);
43             return res;
44     }
45 };
原文地址:https://www.cnblogs.com/daocaorenblog/p/5489299.html