一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
我的傻逼代码:
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
sort(data.begin(), data.end());
int i = 0;
while(i < data.size()) {
if(data[i] != data[i+1]){
*num1 = data[i];
i++;
break;
}else i += 2;
}
while(i < data.size()) {
if(data[i] != data[i+1]){
*num2 = data[i];
break;
}else i += 2;
}
}
};
map,时间复杂度O(n),空间复杂度O(n):
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
unordered_map<int, int> mp;
for (const int k : data) ++mp[k];
vector<int> ret;
for (const int k : data) {
if (mp[k] == 1) {
ret.push_back(k);
}
}
*num1 = ret[0];
*num2 = ret[1];
}
};
神仙:
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
int ret = 0;
for (const int k : data) ret ^= k;
ret &= (-ret);
*num1 = 0, *num2 = 0;
for (const int k : data) {
if (k & ret) *num1 ^= k;
else *num2 ^= k;
}
}
};
138

被折叠的 条评论
为什么被折叠?



