【ETOJ P1012】排序去重问题 题解(向量+排序+去重)

79 阅读1分钟

题目描述

给定一个大小为 nn 的数组 aa,请将 aa 中元素去重后从小到大排序输出。

输入格式

第一行一个整数 TT 表示测试样例个数。 (1T100)(1≤T≤100)

对于每一个测试样例:

  • 第一行一个整数 nn 表示数组大小。 (1n103)(1≤n≤10^3)
  • 第二行 nn 个整数表示数组元素。 (1ai500)(1≤a_i≤500)

输出格式

对于每个样例,在一行输出结果后换行。

样例输入1

2
5
1 1 3 2 2
3
1 2 3

样例输出1

1 2 3
1 2 3

思路

首先,从输入中读取了一系列的测试用例,每一个测试用例都包含一组整数。对于每一个测试用例,首先清空了储存整数的向量v1,然后读入了n个整数并存入v1。

接下来,使用了STL中的sort函数对v1进行了排序,然后又使用了unique函数去除了其中的重复元素。unique函数只能去除相邻的重复元素,因此在使用该函数前需要先进行排序。unique函数会返回一个迭代器,指向去重后的序列的末尾,然后使用erase函数删除这个位置之后的所有元素,完成去重操作。

最后,遍历了v1中的所有元素并输出,每个元素后面都加了一个空格。遍历完一次v1后,输出了一个换行符,表示这个测试用例的输出结束。


AC代码

#include <algorithm>
#include <iostream>
#include <vector>
#define AUTHOR "HEX9CF"
using namespace std;

int t, n;
vector<int> v1;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	cin >> t;
	while (t--) {
		v1.clear();
		cin >> n;
		while (n--) {
			int a;
			cin >> a;
			v1.push_back(a);
		}
		sort(v1.begin(), v1.end());
		v1.erase(unique(v1.begin(), v1.end()), v1.end());
		for (auto &i : v1) {
			cout << i << " ";
		}
		cout << endl;
	}
	return 0;
}