哈希表
时空复杂度 O(n)
class Solution {
public:
vector<int> findNumsAppearOnce(vector<int>& nums) {
unordered_map<int,int> m;
vector<int> res;
for(auto x : nums) m[x]++;
for(auto x : nums){
if(m[x] == 1)
res.push_back(x);
}
return res;
}
};
令所有元素的相异或得
sum
,sum = a ^ b
.找出a
,b
不同的位,再根据找到的不同的位分成两组分别异或,可得出答案。
时间复杂度O(n),空间复杂度O(1).
class Solution {
public:
vector<int> findNumsAppearOnce(vector<int>& nums) {
int sum = 0, k = 0, l = 0;
for(auto x : nums) sum ^= x;
while(!((sum>>k) & 1)) k++;
for(auto x : nums){
if(x >> k & 1)
l ^= x;
}
return vector<int>{l,l^sum};
}
};
标签:nums,auto,sum,Acwing73,vector,res,复杂度
From: https://www.cnblogs.com/poteitoutou/p/17077219.html