题意:
一个[1,n]长度为n的数组,复制一个相同的数组,将原数组插入到新数组中,使得前后顺序不变,给定插入后的数组,找到原数组。
思路:
遍历一遍,输出序列中当前没有出现过的数字即可。
Code:
#include<iostream>
#include<cstring>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--){
int a[105];
bool vis[105];
int n;
cin>>n;
memset(vis,false,sizeof(vis));
for(int i=1;i<=n*2;i++){
cin>>a[i];
}
for(int i=1;i<=n*2;i++){
if(vis[a[i]]==0){
cout<<a[i]<<" ";
vis[a[i]]=1;
}
}
cout<<endl;
}
return 0;
}
收获:
1.需要输入的数据集超大时,使用以下代码段可明显加快cin、cout执行效率,但不可与scanf混用
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
2.初始化Bool数组
bool变量占一个字节
初始化全0:bool vis[105]={0};即可。
注意不能全初始化为1:若bool vis[105]={true};只会把第一个变成true,其他都是false;
对于仅在一个特定函数内部使用的变量,一定要在这个函数内部将其定义为局部变量,而不能定义为外部变量。
3.fill与memset函数的区别