题解:洛谷 P4305 [JLOI2011] 不重复数字

【题目来源】

洛谷:[P4305 JLOI2011] 不重复数字 - 洛谷

【题目描述】

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

【输入】

本题有多组数据。

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

对于每组数据:

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

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

【输出】

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

【输入样例】

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

【输出样例】

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

【解题思路】

image

【算法标签】

《洛谷 P4305 不重复数字》 #排序# #哈希,hash# #各省省选# #吉林# #O2优化# #2011#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

int t, n, x;  // t: 测试用例数, n: 每个用例的数字个数, x: 临时变量

int main()
{
    // 优化输入输出速度
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    
    // 输入测试用例数
    cin >> t;
    
    // 处理每个测试用例
    while (t--) 
    {
        map<int, bool> a;  // 使用map记录数字是否出现过
        
        // 输入数字个数
        cin >> n;
        
        // 处理每个数字
        for (int i = 1; i <= n; i++) 
        {
            cin >> x;
            
            // 如果数字已经出现过,跳过
            if (a[x]) 
            {
                continue;
            }
            else 
            {
                // 记录数字并输出
                a[x] = 1;
                cout << x << " ";
            }
        }
        
        // 每个测试用例结束后换行
        cout << endl;
    }
    
    return 0;
}

【运行结果】

2
11
1 2 18 3 3 19 2 3 6 5 4
1 2 18 3 19 6 5 4 
6
1 2 3 4 5 6
1 2 3 4 5 6 
posted @ 2026-02-18 19:54  团爸讲算法  阅读(1)  评论(0)    收藏  举报