一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
思路1:暴力解法,每次到一个位置使用循环遍历其后面是否出现过即可,如果没有则存起来,如果找到了那么标记一下后面那个以免重复寻找
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
if(data.size()==0)
return;
vector<bool>visited(data.size(),false);
vector<int>res;
for(int i = 0;i<data.size();++i){
bool flag = true;
if(visited[i]==false){
for(int j = i+1;j<data.size();++j){
if(data[i]==data[j]){
flag = false;
visited[j]=true;
break;
}
}
if(true==flag)
res.push_back(data[i]);
}
}
*num1 = res[0];
*num2 = res[1];
}
};
方法2:使用hash结构,空间换时间
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
if(data.size()==0)
return;
unordered_map<int,int> arr_hash;
for(int i = 0;i<data.size();++i){
if(arr_hash.find(data[i])==arr_hash.end())
arr_hash[data[i]] = 1;
else
arr_hash[data[i]]++;
}
auto iter = arr_hash.begin();
vector<int> res;
while(iter!=arr_hash.end()){
if(iter->second==1)
res.push_back(iter->first);
iter++;
}
*num1 = res[0];
*num2 = res[1];
}
};