JD7. 集合
描述
输入描述
每组输入数据分为三行,第一行有两个数字n,m,分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超过int范围的整数,每个元素之间有个空格隔开。输出描述
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开,行末无空格。示例1
输入:
3 3 1 3 5 2 4 6
输出:
1 2 3 4 5 6
示例2
输入:
2 2 1 2 1 2
输出:
1 2
C++ 解法, 执行用时: 1ms, 内存消耗: 504KB, 提交时间: 2017-09-07
#include <math.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> #include <limits.h> #include <stdbool.h> #include <algorithm> using namespace std; int main(){ int n,m; scanf("%d %d",&n,&m); int *ss = (int *)malloc(n*sizeof(int)); for(int i=0;i<n+m;i++)scanf("%d",ss+i); sort(ss,ss+n+m); int temp; if(n+m >= 1){ printf("%d",ss[0]); temp = ss[0]; } for(int i=1;i<n+m;i++){ if(ss[i] == temp)continue; printf(" %d",ss[i]); temp = ss[i]; } return 0; }
C++ 解法, 执行用时: 3ms, 内存消耗: 628KB, 提交时间: 2017-08-17
#include<stdio.h> #include<algorithm> using namespace std; int s[20020]; int main() { int a,b,i; while(~scanf("%d%d",&a,&b)) { for(i=0;i<a+b;i++) { scanf("%d",&s[i]); } sort(s,s+a+b); printf("%d",s[0]); for(i=1;i<a+b;i++) { if(s[i-1]!=s[i]) printf(" %d",s[i]); } puts(""); } return 0; }
C++ 解法, 执行用时: 3ms, 内存消耗: 632KB, 提交时间: 2017-07-26
#include<cstdio> #include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> v; int n,m,i; int temp; while(scanf("%d%d",&n,&m)!=EOF){ v.clear(); for(i=1;i<=m+n;i++){ scanf("%d",&temp); v.push_back(temp); } sort(v.begin(),v.end()); v.erase(unique(v.begin(), v.end()), v.end()); for (i = 0; i < v.size()-1; i++) { printf("%d ",v[i]); } printf("%d\n",v[i]); } //unique()函数将重复的元素放到vector的尾部 然后返回指向第一个重复元素的迭代器 再用erase函数擦除从这个元素到最后元素的所有的元素 return 0; }
C 解法, 执行用时: 4ms, 内存消耗: 376KB, 提交时间: 2020-09-17
#include<stdio.h> void fast(int* a,int f,int l){ int i =f,j=l; int val = a[i]; int temp; while(i<j){ while(i<j && val<=a[j]){ j--; } while(i<j && val>=a[i]){ i++; } if(i<j){ temp = a[j]; a[j]=a[i]; a[i]=temp; } } temp = a[j]; a[j]=a[f]; a[f]=temp; if(i-1>f) fast(a,f,i-1); if(l>i+1) fast(a,i+1,l); } int main(){ int n,m; scanf("%d %d",&n,&m); int * a=(int*)malloc(sizeof(int)*(n+m)); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i=n;i<n+m;i++){ scanf("%d",&a[i]); } fast(a,0,n+m-1); for(int i=0;i<n+m;i++){ if(i==0) printf("%d",a[0]); if(i>0 && a[i]!=a[i-1]){ printf(" %d",a[i]); } } return 0; }
C++ 解法, 执行用时: 4ms, 内存消耗: 480KB, 提交时间: 2018-09-12
#include<cstdio> #include<algorithm> using namespace std; const int N=2e4+3; int read(){ int x=0;char c=getchar(); while(c<'0'||c>'9')c=getchar(); while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar(); return x; } int A[N]; int main(){ int x=read(),n=x+read(); if(!n)return 0; for(int i=0;i<n;i++)A[i]=read(); sort(A,A+n); printf("%d",A[0]); for(int i=1;i<n;i++) if(A[i]!=A[i-1])printf(" %d",A[i]); return 0; }