欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【牛客题解】 ——数组中只出现一次的数字

程序员文章站 2022-07-15 11:00:29
...

数组中只出现一次的数字

【牛客题解】 ——数组中只出现一次的数字
思路一:利用unordered_map,先把数组中的数字和次数放入map中,再次遍历数组,如果次数为1,则记录结果

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) 
    {
        unordered_map<int,int> m;
        for(int i=0;i<data.size();i++)
        {
            m[data[i]]++;
        }
        vector<int> v;
        for(int i=0;i<data.size();i++)
        {
            if(m[data[i]]==1)
                v.push_back(data[i]);
        }
        *num1=v[0];
        *num2=v[1];
    }
};

思路二:利用set,如果set中好不到数字,则进行插入,如果找到数字,则进行删除(针对出现两次的数字),到最后set中就只剩下出现一次的数字。

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) 
    {
        set<int> s;
        set<int> ::iterator it;
        for(int i=0;i<data.size();i++)
        {
            if(s.find(data[i])==s.end())
                s.insert(data[i]);
            else
            {
                it=s.find(data[i]);
                s.erase(it);
            }
        }
        it=s.begin();
        *num1=*it;
        *num2=*(++it);
    }
};