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)