Acwing73
哈希表
时空复杂度 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};
}
};
浙公网安备 33010602011771号