题目的主要信息:

将两个整型数组按照升序合并,并且过滤掉重复数组元素。

方法一:

用一个集合set保存两个数组,这样可以保证元素的不重复。输出的时候用iter遍历一遍,能保证升序输出。 alt 具体做法:

#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;
}

复杂度分析:

  • 时间复杂度:O(m+n)O(m+n),需要遍历一遍集合输出。
  • 空间复杂度:O(m+n)O(m+n),集合s的大小为m+nm+n

方法二:

用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;
}

复杂度分析:

  • 时间复杂度:O(m+n)O(m+n),需要遍历一遍合并后的vector。
  • 空间复杂度:O(m+n)O(m+n),v1的大小为m+nm+n