给你两个集合,要求{A} + {B}。 注:同一个集合中不会有两个相同的元素。
输出时按数字升序输出。
数据范围: ,集合中的元素满足
每组输入数据分为三行,第一行有两个数字n,m,分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超过int范围的整数,每个元素之间有个空格隔开。
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开,行末无空格。
3 3 1 3 5 2 4 6
1 2 3 4 5 6
2 2 1 2 1 2
1 2
/*直接运用STL里的set来做,比较简单*/ #include<iostream> #include<iterator> #include<set> using namespace std; int main(void) { int n, m; while (cin >> n, cin >> m) { set<int> st; int num; for (int i = 0; i < n + m; ++i) { cin >> num; st.insert(num); } int size = st.size(); set<int>::iterator it = st.begin(); for (int i = 0; i < size - 1; ++i) { cout << *it << " "; ++it; } cout << *it << endl; } return 0; }
import java.util.Iterator; import java.util.Scanner; import java.util.TreeSet; public class StringUtil { //集合 public static void main(String[] args){ Scanner in = new Scanner(System.in); TreeSet<Integer> set = new TreeSet<Integer>(); while(in.hasNext()){ int m = in.nextInt(); int n = in.nextInt(); for(int i=1; i<=m+n; i++){ set.add(in.nextInt()); } Iterator<Integer> it = set.iterator(); while(it.hasNext()){ System.out.print(it.next()); if(it.hasNext()) System.out.print(" "); } } } }
直接set搞起来
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
set<int> s;
int main(){
int n, m; scanf("%d%d", &n, &m);
for(int i = 0; i < m + n; i++){
int tmp; scanf("%d", &tmp);
s.insert(tmp);
}
int first = 1;
for(set<int>::const_iterator p = s.cbegin(); p != s.cend(); p++){
if(first) {printf("%d", *p); first = 0;}
else printf(" %d", *p);
}
printf("\n");
}
}
var count = readline() var mapOne = readline().split(' ') var mapTwo = readline().split(' ') var total = mapOne.concat(mapTwo) var ans = total.sort(function (a, b) { return a - b }).join(' ') .replace(/((\d+)(\s*))\1*\2*/g, '$2$3') .replace(/\s$/, '') print(ans)
import java.util.*; import java.io.*; public class Main{ public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); TreeSet<Integer> set = new TreeSet<>(); for(int i = 1; i <= m+n;i++) { set.add(sc.nextInt()); } Iterator<Integer> it = set.iterator(); while(it.hasNext()) { System.out.print(it.next()); if(it.hasNext()) { System.out.print(" "); } } } }
var arr = readline().split(' '); var strA = readline(); var strB = readline(); var res = (strA + ' ' + strB).split(' '); res.sort((a, b) => (a - b)); // 集合中无重复元素(去重) var obj = {}; var r = []; for(var i=0;i<res.length;i++) { if(!obj[res[i]]) { r.push(res[i]); obj[res[i]] = 1; } } print(r.join(' '));
方法有好多,先说下面被注释的,笨方法,而且时间复杂度有点高,但是容易想,操作起来需要细心, 创建一个新数组两个数组一个一个比大小进去, 感觉没有错,但是通过率有点尴尬, 之后就是这个通过的方法 这个就是将他们push到vector容器中,排序+查重, 其实我是用习惯数组了,但是不得不说容器真的很方便, #include<iostream> #include<algorithm> #include<vector> #define N 20000 using namespace std; int main() { int m,n; while(cin>>m>>n) { vector<int> Number;int t; for(int i = 0;i<m+n;i++) { cin>>t;Number.push_back(t); } sort(Number.begin(),Number.end()); for(int i = 0;i<m+n-1;i++) { if(Number[i]==Number[i+1]) {Number.erase(Number.begin()+i);//为何不可以用 Number.erase(Number+i); --i;--n; } } for(int i = 0;i<m+n-1;i++) cout<<Number[i]<<" ";cout<<Number[m+n-1]<<endl; } return 0; } /*int main() { int m,n; while(cin>>m>>n) { int a[m+1],b[n+1]; for(int i = 0 ;i<m;i++) cin>>a[i]; for(int i = 0;i<n;i++) cin>>b[i]; int c[N]; int k = 0; for(int i = 0,j = 0;i<m||j<n;) { if(i==m) c[k++] = b[j++]; else if(j==n) c[k++] = a[i++]; else if(a[i]==b[j]) {c[k++] = a[i++];j++;} else if(a[i]<b[j]) c[k++] = a[i++]; else if(a[i]>b[j]) c[k++] = b[j++]; }//cout<<k<<endl; for(int i = 0;i<k-1;i++)cout<<c[i]<<" ";cout<<c[k-1]<<endl; } return 0; }*/
int main() { int n,m; cin>>n>>m; set<int> res; int x; for(int i=0;i<n+m;++i) { cin>>x; res.insert(x); } int c=0; for(auto i:res) { ++c; cout<<i; if(c!=res.size()) { cout<<' '; } } return 0; }Set Set Set~
/** * 思路: * 1.暴力 * 2.使用list去重并排序 * 3.时间复杂度:O(n) * 4.空间复杂度:O(n) * 5.这里吐槽下测试用例 * 6.明明说好同一个集合中不会出现重复的元素,但是卡死在%10,看了题解才知道 */ public static void mergeSet(int len1, int[] set1, int len2, int[] set2) { //鲁棒 if (len1 == 0 && len2 == 0) { System.out.println(""); } List<Integer> list = new ArrayList<>(); //1.set1全部进list for (int i = 0; i < len1; i++) { //去重 if (!list.contains(set1[i])) { list.add(set1[i]); } } //2.set2也进list,但是利用contains方法去重 for (int j = 0; j < len2; j++) { if (!list.contains(set2[j])) { list.add(set2[j]); } } //3.重写一个比较器,对list排序 list.sort(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } }); //4.循环输出(注意最后一个空格应该去掉) for (int k = 0; k < list.size() - 1; k++) { System.out.print(list.get(k) + " "); } System.out.print(list.get(list.size() - 1)); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int m = scanner.nextInt(); int[] set1 = new int[n]; int[] set2 = new int[m]; for (int i = 0; i < n; i++) { set1[i] = scanner.nextInt(); } for (int j = 0; j < m; j++) { set2[j] = scanner.nextInt(); } mergeSet(n, set1, m, set2); }
#include <iostream>
#include <vector>
#include <set>
using namespace std;
void solve(std::vector<int> &v1, std::vector<int> &v2) {
std::set<int> s(v1.begin(), v1.end());
s.insert(v2.begin(), v2.end());
auto end = --s.end();
for (auto it = s.begin(); it != end; ++it) {
cout << *it << " ";
}
cout << *end;
}
int main() {
int n1, n2;
cin >> n1 >> n2;
std::vector<int> v1(n1), v2(n2);
for (int i = 0; i < n1; ++i)
cin >> v1[i];
for (int i = 0; i < n2; ++i)
cin >> v2[i];
solve(v1, v2);
return 0;
}
#include <iostream>
#include <set>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
set<int> aset;
for(int i = 0;i < n;i++) {
int num;
cin >> num;
aset.insert(num);
}
for(int i = 0;i < m;i++) {
int num;
cin >> num;
aset.insert(num);
}
vector<int> resvec(aset.begin(), aset.end());
for(int i = 0;i < resvec.size();i++) {
cout << resvec[i];
i == resvec.size()-1 ? cout << endl : cout << ' ';
}
return 0;
}
#include <iostream> #include <algorithm> using namespace std; int main() { int n,m; cin >> n >> m; vector<int> data; for(int i = 0; i < n+m; i++) { int num; cin >> num; data.push_back(num); } sort(data.begin(), data.end()); data.erase(unique(data.begin(), data.end()), data.end()); for(int i = 0; i < data.size(); i++) i == 0 ? cout << data[i] : cout << " " << data[i]; return 0; }
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n, m, i, num, flag = 0;
cin >> n >> m;
vector<int> v;
for (i = 0; i < n + m; i++)
{
cin >> num;
v.push_back(num);
}
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
for (i = 0; i < v.size(); i++)
{
if (flag == 0)
{
cout << v[i];
flag = 1;
}
else cout << " " << v[i];
}
cout << endl;
return 0;
}