题目描述:
给你两个集合,要求{A} + {B}。 注:同一个集合中不会有两个相同的元素。
输入描述:
每组输入数据分为三行,第一行有两个数字n,m(0 ≤ n,m ≤ 10000),分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超过int范围的整数,每个元素之间有个空格隔开。
输出描述:
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开,行末无空格。
输入样例:
3 3
1 3 5
2 4 6
输出样例:
1 2 3 4 5 6
解题思路:
额,首先我以为这是一道水题,然后直接用数组求解再sort排序一提交代码hhhhhh惊呆了,只通过了10%的case。是我太小瞧这道网易校招题了,把数组换成set来求解好吧。需要注意的是输出的时候,在for-each循环中不能直接用it==s.begin()来判断是不是第一个元素,编译器会报错,这里我用了一个bool型的变量isVirgin来标记是不是第一次(滑稽.jpg 我就是要给它起这个名)。
AC代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m,n;
while(cin >> m >> n)
{
set<int> s;
int temp;
for (int i = 0; i < n+m; i++)
{
cin >> temp;
s.insert(temp);
}
bool isVirgin = true; //判断是不是第一次
for(auto it : s)
{
if(isVirgin)
{
cout << it;
isVirgin = false;
}
else
{
cout << " " << it;
}
}
cout << endl;
}
return 0;
}