正解是位运算
歪解是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;
}
};