top1编程
← 返回题目
题解

数字去重输出

1 条题解

  • 0
    @ 2026-8-5 1:04:44

    解题思路

    题目说数字都在 1~100 之间,这是一个很好的条件:我们可以用“标记数组”来去重。

    准备一个长度为 101 的标记数组 used(下标 0 不用),每读到一个数字 x,就把 used[x] 标成 true,表示 x 出现过。

    怎么做到“按从小到大输出”且“重复的只输出一次”? 非常简单:从 1 到 100 从小到大扫描,凡是 used[i] 为 true 就把 i 输出出来。 因为扫描方向是从小到大,所以输出自动排好序;因为每个数只标记一次、只输出一次,所以自然去重。

    参考代码

    // 数字去重输出:数字范围1~100,标记出现过的,按从小到大只输出一次
    #include <iostream>
    using namespace std;
    bool used[101];
    int main() {
        int n;
        cin >> n;
        for (int i = 0; i < n; i++) {
            int x;
            cin >> x;
            used[x] = true;                               // 这个数出现过
        }
        bool first = true;
        for (int i = 1; i <= 100; i++) {                  // 从小到大枚举所有可能值
            if (used[i]) {
                if (!first) cout << ' ';
                cout << i;
                first = false;
            }
        }
        cout << endl;
        return 0;
    }
    

    复杂度分析

    读入 n 个数需要 O(n),从 1 扫到 100 是常数时间,总时间复杂度 O(n)。标记数组大小固定,空间复杂度 O(1)。

    • 1