C++ 算法题:去除重复数字并排序
C++ 算法题:去除重复数字并排序
问题描述
给你 N 个数 (n <= 100),每个数都在 (0 ~ 1000) 之间,其中由很多重复的数字,请将重复的数字只保留一个,并将剩下的数由小到大排序并输出。
输入描述
输入有 2 行:
- 第 1 行为 1 个正整数,表示数的个数: N
- 第 2 行有 N 个用空格隔开的整数。
输出描述
- 第 1 行为 1 个正整数 M,表示不相同数的个数。
- 接下来的 M 行,每行一个整数,表示从小到大排好序的不相同的数。
示例输入 1
10
20 40 32 67 40 20 89 300 400 15
示例输出 1
8
15
20
32
40
67
89
300
400
代码实现
#include <iostream>
#include <set>
#include <vector>
using namespace std;
int main() {
int N;
cin >> N;
set<int> numbers;
vector<int> uniqueNumbers;
for (int i = 0; i < N; i++) {
int num;
cin >> num;
numbers.insert(num);
}
for (int num : numbers) {
uniqueNumbers.push_back(num);
}
cout << uniqueNumbers.size() << endl;
for (int num : uniqueNumbers) {
cout << num << endl;
}
return 0;
}
代码解析
- 使用
set数据结构存储输入的数字,set会自动去重并排序。 - 遍历
set,将所有唯一数字添加到vector中。 - 输出
vector的大小,表示唯一数字的个数。 - 遍历
vector,输出所有唯一数字。
总结
本题利用 set 的去重和排序特性,实现了去除重复数字并排序的功能。代码简洁易懂,效率较高。
原文地址: https://www.cveoy.top/t/topic/qnKs 著作权归作者所有。请勿转载和采集!