P4305 [JLOI2011] 不重复数字——不要直接用unordered_map无序输出

题目描述

给定 \(n\) 个数,要求把其中重复的去掉,只保留第一次出现的数。

输入格式

本题有多组数据。

第一行一个整数 \(T\),表示数据组数。

对于每组数据:

第一行一个整数 \(n\)

第二行 \(n\) 个数,表示给定的数。

输出格式

对于每组数据,输出一行,为去重后剩下的数,两个数之间用一个空格隔开。

输入输出样例 #1

输入 #1

2
11
1 2 18 3 3 19 2 3 6 5 4
6
1 2 3 4 5 6

输出 #1

1 2 18 3 19 6 5 4
1 2 3 4 5 6

说明/提示

对于 \(30\%\) 的数据,\(n \le 100\),给出的数 \(\in [0, 100]\)

对于 \(60\%\) 的数据,\(n \le 10^4\),给出的数 \(\in [0, 10^4]\)

对于 \(100\%\) 的数据,\(1 \le T\le 50\)\(1 \le n \le 5 \times 10^4\),给出的数在 \(32\) 位有符号整数范围内。

正解

#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin>>t;
for (int k=0;k<t;k++) {
int n;
cin>>n;
unordered_set<int> myset;
vector<int> myvector;
for (int i=0;i<n;i++) {
int a;
cin>>a;
if(myset.find(a)==myset.end()) {
myvector.push_back(a);
myset.emplace(a);
}
}
for (int num:myvector) {
cout<<num<<" ";
}
cout<<endl;
}
}

错解

#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin>>t;
for (int k=0;k<t;k++) {
int n;
cin>>n;
unordered_set<int> myset;
for (int i=0;i<n;i++) {
int a;
cin>>a;
myset.emplace(a);
}
vector<int> myvector;
for (auto num:myset) {
myvector.push_back(num);
}
for (int i=myvector.size()-1;i>=0;i--) {
if(i<myvector.size()-1) cout<<" ";
cout<<myvector[i];
}
cout<<endl;
}
}
发布于   xiins  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示