题目的主要信息:
将两个整型数组按照升序合并,并且过滤掉重复数组元素。
方法一:
用一个集合set保存两个数组,这样可以保证元素的不重复。输出的时候用iter遍历一遍,能保证升序输出。 具体做法:
#include<iostream>
#include<set>
using namespace std;
int main(){
set<int> s;//用集合储存两个数组可以去重
int m,n;
while(cin>>m){
set<int> s;
for(int i=0;i<m;i++){//输入第一个数组
int temp;
cin>>temp;
s.insert(temp);
}
cin>>n;
for(int i=0;i<n;i++){//输入第二个数组
int temp;
cin>>temp;
s.insert(temp);
}
for(auto iter = s.begin(); iter != s.end(); iter++){//用iter输出可以保证升序
cout<<*iter;
}
cout<<endl;
}
return 0;
}
复杂度分析:
- 时间复杂度:,需要遍历一遍集合输出。
- 空间复杂度:,集合s的大小为。
方法二:
用vector分别存储两个数组,用inset函数将两个vector合并,用sort函数排序,最后输出的时候判断当前的值是否和前一个值相同,若相同则表示重复,不输出;若不相同则输出。
具体做法:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int m,n;
while(cin>>m){
vector<int> v1,v2;
for(int i=0;i<m;i++){//保存数组1
int temp;
cin>>temp;
v1.push_back(temp);
}
cin>>n;
for(int j=0;j<n;j++){//保存数组2
int temp;
cin>>temp;
v2.push_back(temp);
}
v1.insert(v1.end(), v2.begin(),v2.end());//合并两个数组
sort(v1.begin(),v1.end());//排序
for(int i=0;i<m+n;i++){
if(i!=0&&v1[i]==v1[i-1]){//去重
continue;
}
cout<<v1[i];
}
cout<<endl;
}
return 0;
}
复杂度分析:
- 时间复杂度:,需要遍历一遍合并后的vector。
- 空间复杂度:,v1的大小为。