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;
}

代码解析

  1. 使用 set 数据结构存储输入的数字,set 会自动去重并排序。
  2. 遍历 set,将所有唯一数字添加到 vector 中。
  3. 输出 vector 的大小,表示唯一数字的个数。
  4. 遍历 vector,输出所有唯一数字。

总结

本题利用 set 的去重和排序特性,实现了去除重复数字并排序的功能。代码简洁易懂,效率较高。

C++ 算法题:去除重复数字并排序

原文地址: https://www.cveoy.top/t/topic/qnKs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录