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)