这题的本质就是让我们去重,但是这题不能使用暴力的方式,因为暴力的时间复杂度高达 。这样的时间复杂度肯定无法满分,所以我们便想到了函数。函数判断是否在数组中的方式为:
if(a.find(k)==a.end()) //不在数组中
此时,我们已经有了一个清晰的思路了:输入一个数,判断它是否在数组中,如果不在就输出,并标记。代码如下:
#include<bits/stdc++.h>
#include<map>
using namespace std;
map<int,int>a;
int n,m,k,len;
int main()
{
scanf("%d",&n); //只能用格式化输出,否则会超时
while(n--)
{
scanf("%d",&m);
a.clear(); //初始化、清空数组
while(m--)
{
scanf("%d",&k);
if(a.find(k)==a.end()) //如果不在数组中就输出
{
printf("%d ",k);
a[k]=1; //1可以改为任何数,因为他只是为了标记
}
}
printf("\n");
}
return 0;
}
文章和代码较为简短,但是能AC,再怎么说也是绿题。(第一篇文章,从自己洛谷博客上复制的,就写了个转载,源地址:blog)