正解是位运算

歪解是map映像(蒟蒻永远只会用歪解)

完全不符合复杂度的东西怎么会有人想出来

程序很明显分以下几步

  • 遍历vector填充map的内容
  • 查询map中数的次数
  • 找到符合题意的数并返回

因为这个数据是int类型而且个数也绝对为int类型

那么这个map很好创建了

map<int,int>m;

因为是int与int之间的映像所以这个相当于

int m[1000000]={0};

都是桶的意思

但是map是有多少建多少

桶排序是根据数据范围定数组大小的(所以会爆)

对于这句代码:

m[array[i]]++;

如果m[array[i]]之前没有创建过map会自动创建并更改数值

反之就直接更改数值

总体代码差不多就是这样

class Solution {
public:
    map<int,int>m;
    vector<int> FindNumsAppearOnce(vector<int>& array) {
        for(int i=0;i<array.size();i++)
        {
        	//遍历整个vector将每个数字个数存到map里
            m[array[i]]++;
        }
        //以为直接输出写了两个变量没想到要返回vector...
        int a=0,b=0;
        for(int i=0;i<array.size();i++)
        {
            if(m[array[i]]==1)
            {
            	//查找符合条件的数存到变量里
                if(a==0)
                {
                    a=array[i];
                }
                else
                {
                    b=array[i];
                }
            }
        }
        //我绝对是**
        vector<int>ans;
        if(a>=b)
        {
            ans.push_back(b);
            ans.push_back(a);
        }
        else
        {
            ans.push_back(a);
            ans.push_back(b);
        }
        return ans;
    }
};