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

数组中只出现一次的数字

【牛客题解】 ——数组中只出现一次的数字_第1张图片
思路一:利用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);
    }
};

你可能感兴趣的:(牛客力扣习题分析,C++,数据结构)