40、数组中只出现一次的数字 再刷
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
1、常规做法
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
unordered_map<int, int> unmp;
for (int i = 0; i < data.size(); ++i) {
unmp[data[i]] += 1;
}
auto it = unmp.begin();
while (it != unmp.end()) {
if (it->second == 1) {
*num1 = it->first;
++it;
break;
}
++it;
}
while (it != unmp.end()) {
if (it->second == 1) {
*num2 = it->first;
break;
}
++it;
}
} 二刷:
1、hash表的笨方法
运行时间:3ms 占用内存:376k
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
unordered_map<int,int> unmp;
for(auto a:data){
unmp[a]++;
}
auto beg = unmp.begin();
while(beg != unmp.end())
{
if(beg->second == 1)
{
*num1 = beg->first;
beg++;
break;
}
beg++;
}
while(beg != unmp.end())
{
if(beg->second == 1)

京公网安备 11010502036488号