剑指 Offer 56

思路

方法:分组异或

 1 class Solution {
 2 public:
 3     vector<int> singleNumbers(vector<int>& nums) {
 4         int res = 0;
 5         for(int &num: nums) {
 6             res ^= num;
 7         }
 8 
 9         int a = 0, b = 0;
10         int k = 1;
11         while((k & res) == 0) { 
12             k = k << 1;
13         }
14 
15         for(int &num: nums) {
16             if((k & num) == 0) {
17                 a ^= num;
18             } else {
19                 b ^= num;
20             }
21         }
22 
23         return vector<int>({a, b});
24     }
25 };

参考

力扣官方题解 - 数组中数字出现的次数

原文地址:https://www.cnblogs.com/FengZeng666/p/13970545.html