首页 > 试题广场 >

整型数组合并

[编程题]整型数组合并
  • 热度指数:136353 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定的由 n 个整数组成的数组 \{a_1, a_2, \dots, a_n\}m 个整数组成的数组 \{b_1, b_2, \dots, b_m\},将它们合并后从小到大排序,并输出去重后的结果。

\hspace{15pt}注意,本题在输出时,元素间不需要输出空格。

输入描述:
\hspace{15pt}第一行输入一个整数 n\left(1 \leqq n \leqq 150 \right) 代表数组 a 中的元素个数。
\hspace{15pt}第二行输入 n 个整数 a_1, a_2, \dots, a_n \left(-1 \leqq a_i \leqq 10^5 \right) 代表数组 a 中的元素。
\hspace{15pt}第三行输入一个整数 m\left(1 \leqq m \leqq 150 \right) 代表数组 b 中的元素个数。
\hspace{15pt}第四行输入 m 个整数 b_1, b_2, \dots, b_m \left(-1 \leqq b_i \leqq 10^5 \right) 代表数组 b 中的元素。


输出描述:
\hspace{15pt}输出按升序合并、去重后的数组。
示例1

输入

3
1 2 5
4
-1 0 3 2

输出

-101235

说明

\hspace{15pt}在这个样例中,拼接后得到 \{1, 2, 5, -1, 0, 3, 2\},去重后得到 \{1, 2, 5, -1, 0, 3\},排序后得到 \{-1, 0, 1, 2, 3, 5\}
示例2

输入

1
11
1
111

输出

11111
这个测试用例感觉不太对吧
测试用例:
50 525 1435 1695 3861 4847 9516 11430 14061 18581 22685 22917 23641 23710 24003 27200 29507 31105 31299 34210 38135 40454 41064 41091 41285 41379 45057 45783 46608 47373 50704 52197 52676 53894 55374 55911 57964 58542 58655 59060 72172 73406 75870 76763 79143 79539 79999 80864 84319 85218 86802 102 1804 1917 2420 5513 5933 6463 6829 7730 7801 9195 9506 9955 11622 12067 12176 12843 14410 15504 15966 16018 16100 16599 19251 20049 21011 21201 23431 25796 26130 27151 27348 28150 31037 33740 33940 34645 34972 36147 37654 39810 40143 40160 40216 41889 43786 43990 46155 46330 46855 46920 47666 47760 48605 48795 50334 51288 52746 55091 56183 58489 58597 61665 61985 62427 63403 63558 63743 64234 65942 66801 68427 68609 68738 70588 71408 74111 74818 75298 77316 78586 79375 80636 81664 81763 82292 82603 84089 84114 84766 85417 85710 86434 86552 90294 92295 93248 93352 93548 93561 94862 95721 95783 
对应输出应该为:
525143516951804191724203861484755135933646368297730780191959506951699551143011622120671217612843140611441015504159661601816100165991858119251200492101121201226852291723431236412371024003257962613027151272002734828150295073103731105312993374033940342103464534972361473765438135398104014340160402164045441064410914128541379418894378643990450574578346155463304660846855469204737347666477604860548795503345070451288521975267652746538945509155374559115618357964584895854258597586555906061665619856242763403635586374364234659426680168427686096873870588714087217273406741117481875298758707676377316785867914379375795397999980636808648166481763822928260384089841148431984766852188541785710864348655286802902949229593248933529354893561948629572195783 2394297742275804718281808557944211586116381307615453162331649516533169961777018465186481884120822211082306523204244132681227923286433038031373323083387234180365063723237730377313827339848411354305343493435364706449901500235067451125533675442654960569755797659246593366022163111637106536865424655426641168331691787006971491716917246072766736757427875485765057678676825777088003381092812428145482211832728541085494887218982690008906249097992302927179277093324
你的输出为:
525143516951804191724203861484755135933646368297730780191959506951699551143011622120671217612843140611441015504159661601816100165991858119251200492101121201226852291723431236412371024003257962613027151272002734828150295073103731105312993374033940342103464534972361473765438135398104014340160402164045441064410914128541379418894378643990450574578346155463304660846855469204737347666477604860548795503345070451288521975267652746538945509155374559115618357964584895854258597586555906061665619856242763403635586374364234659426680168427686096873870588714087217273406741117481875298758707676377316785867914379375795397999980636808648166481763822928260384089841148431984766852188541785710864348655286802902949229593248933529354893561948629572195783

最大的数据不就是95783吗, 横线上面多出来的这些数据到底是什么鬼

发表于 2016-03-04 18:10:00 回复(15)
没啥大问题,想到了set就很简单。唯一坑的是最后输出不能printIn,要print,不然一直通过0
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int size1 = scanner.nextInt();
            Set<Integer> set1 = new TreeSet<>();
            for (int i = 0; i < size1; i++) {
                set1.add(scanner.nextInt());
            }
            int size2 = scanner.nextInt();
            for (int i = 0; i < size2; i++) {
                set1.add(scanner.nextInt());
            }
            for (int value:set1) {
                System.out.print(value);
            }
            System.out.println();
        }
    }
}


发表于 2020-07-09 15:56:41 回复(0)
#include<iostream>
#include<set>
using namespace std;
int main() {
	int num, tmp;
	while (cin >> num) {
		set<int> res;
		while (num--) {
			cin >> tmp;
			res.insert(tmp);
		}
		cin >> num;
		while (num--) {
			cin >> tmp;
			res.insert(tmp);
		}
		for (auto i : res) cout << i;
		cout << endl;
	}
}

发表于 2017-03-19 16:34:05 回复(1)
这一题牛客的OJ是不是有问题,在华为的OJ都通过了,牛客竟然不过
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main()
{
    int n,m;
    int val,temp;
    set<int>result;
    while(cin>>n)
    {

        while(n--)
        {
            cin>>val;
            result.insert(val);
        }
        cin>>m;
        while(m--)
        {
            cin>>temp;
            result.insert(temp);
        }
        set<int>::const_iterator it;
        for(it=result.begin();it!=result.end();it++)
        {
            cout<<*it;
        }
        result.clear();  
    }
    return 0;
}

发表于 2016-08-13 15:05:37 回复(6)
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
using namespace std;
int main()
{
	int M,N;
	vector<int> vec;
	while(cin>>M)
	{
		int temp;
	    for(int i=0;i<M;i++)
	    {
	    	cin>>temp;
	    	vec.push_back(temp);
		}
		cin>>N;
		for(int i=0;i<N;i++)
	    {
	    	cin>>temp;
	    	vec.push_back(temp);
		}
		sort(vec.begin(),vec.end()); 
		cout<<vec[0];
		for(int i=1;i<vec.size();i++)
		    {
		    	if(vec[i]==vec[i-1])
		    	    continue;
		        cout<<vec[i];	
			}
//注意,(1)不能输出换行(之前我在输出结束后加了一个换行,就通不过测试用例);
//(2)vector要清除数据(没有这个一直没让我通过);
        vec.clear();
	}
	return 0; 
} 

发表于 2016-07-22 21:08:12 回复(6)
看到去重,就想着 Set。

import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            Set<Integer> set = new HashSet<>();
            
            // 1.输入两个数组
            int n1 = sc.nextInt();
            for(int i=0; i<n1; i++) {
                set.add(sc.nextInt());
            }
            int n2 = sc.nextInt();
            for(int i=0; i<n2; i++) {
                set.add(sc.nextInt());
            }
            
            // 2.将set转为数组
            int[] arr = new int[set.size()];
            int index = 0;
            for(Integer i : set) {
                arr[index++] = i;
            }
            
            // 3.排序数组,输出结果
            Arrays.sort(arr);
            for(int i : arr) {
                System.out.print(i);
            }
        }
    }
}


发表于 2022-04-25 08:11:37 回复(0)
不排序,直接一个set搞定
#include<set>  
#include<iostream>
using namespace std;

int main(){
    int na,nb,temp;
    while(cin>>na){
        set<int> a;
        for(int i=0;i<na;i++){
            cin>>temp;
            a.insert(temp);  //数组1加入a
        }
        cin>>nb;
        for(int i=0;i<nb;i++){
            cin>>temp;
            a.insert(temp); // 数组2继续加入a            }
        for(auto it=a.begin();it!=a.end();it++)
            cout<<*it;  // 输出值
        cout<<endl;
    }
}


发表于 2022-01-13 10:28:46 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while ((s = br.readLine()) != null) {
            String[] s1 = br.readLine().split(" ");
            String s2 = br.readLine();
            String[] s3 = br.readLine().split(" ");
            TreeSet<Integer> set = new TreeSet<>();
            for (String str : s1) {
                set.add(Integer.parseInt(str));
            }
            for (String s4 : s3) {
                set.add(Integer.parseInt(s4));
            }
            for (Integer n : set) {
                System.out.print(n);
            }
            System.out.println();
        }
    }
}

发表于 2021-09-25 10:17:35 回复(0)
TreeSet 轻松解决
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            Set<Integer> set = new TreeSet<>();
            int num1 = in.nextInt();
            for (int i = 0; i < num1; i++) {
                set.add(in.nextInt());
            }
            int num2 = in.nextInt();
            for (int i = 0; i < num2; i++) {
                set.add(in.nextInt());
            }
            for (int i : set) {
                System.out.print(i);
            }
            System.out.println();
        }
    }
 }


发表于 2021-02-23 09:44:35 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            Set<Integer> composite = new TreeSet<>();
            int size1 = scanner.nextInt();
            for (int i = 0; i < size1; i++){
                composite.add(scanner.nextInt());
            }
            int size2 = scanner.nextInt();
            for (int i = 0; i < size2; i++){
                composite.add(scanner.nextInt());
            }
            for (Integer i : composite){
                System.out.print(i);
            }
            System.out.print("\n");
        }
    }
}

发表于 2021-02-15 16:53:22 回复(0)
Java:
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            Set<Integer> set = new TreeSet<>();
            for (int i = 0; i < n; i++)
                set.add(sc.nextInt());
            n = sc.nextInt();
            for (int i = 0; i < n; i++)
                set.add(sc.nextInt());
            for (Integer integer : set) System.out.print(integer);
            System.out.println();
        }
    }
}


发表于 2021-02-01 22:15:36 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main(){
    for(int n,val;cin>>n;){
        set<int> sint;  //set容器:去重,默认从小到大自动排序
        for(int i=0;i<n;++i){
            cin>>val;
            sint.insert(val);
        }
        cin>>n;
        for(int i=0;i<n;++i){
            cin>>val;
            sint.insert(val);
        }
        for(auto i:sint) cout << i;
        cout << endl;
    }
}

      set容器:去重,默认从小到大排序

发表于 2020-06-27 17:47:03 回复(0)
#include<set>
(855)#include<iostream>
#include<stdlib.h>
using namespace std;

void  Merge_integer_arrays()
{
	// 方法: 基于set自动去重排序功能实现

	int num;
	set<int> ans;
	int temp;
	int flag = 0;
	while (cin >> num)
	{
		flag++;
		for (int i = 0; i < num; i++)
		{
			cin >> temp;
			ans.insert(temp);
		}
		if (flag == 2)
		{
			flag = 0;
			for (auto it = ans.begin(); it != ans.end(); it++)
			{
				cout << *it;
			}
			cout << endl;
			ans.clear();
		}
	}
}

int main()
{
	Merge_integer_arrays();
	system("pause");
	return 0;
}

发表于 2020-03-07 17:10:30 回复(0)
//把两个数组直接合为一个,排序后输出
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int m,n;
    while(cin>>m){
        int* a1=new int[m];
        for(int i=0;i<m;i++)
            cin>>a1[i];
        cin>>n;
        int* a2=new int[n];
        for(int i=0;i<n;i++)
            cin>>a2[i];
        int* a3=new int[m+n];
        for(int i=0;i<m;i++)
            a3[i]=a1[i];
        for(int i=0;i<n;i++)
            a3[i+m]=a2[i];
        sort(a3,a3+m+n);
        cout<<a3[0];
        for(int i=1;i<m+n;i++)
            if(a3[i-1]!=a3[i])
                cout<<a3[i];
        cout<<endl;
    }
}

发表于 2020-01-08 18:45:17 回复(0)
#include<iostream>
#include<set>
using namespace std;
int main()
{
    int num,num1,num2;
    while(cin>>num1)
    {
        set<int> res;
        while(num1--)
        {
            cin>>num;
            res.insert(num);
        }
        cin>>num2;
        while(num2--)
        {
            cin>>num;
            res.insert(num);
        }
        set<int>::iterator iter;
        for(iter = res.begin();iter!= res.end();iter++)
        {
            cout<<*iter;
        }
        cout<<endl;
        res.clear();
    }
    return 0;
}
这个题很简单,因为需要升序排列两个数组中的元素,所以使用STL中的set最为简单,因为set中的元素都是按升序排列的,所以直接输入到set中就OK。
发表于 2019-12-10 09:29:41 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()) {
            Set<Integer> set = new TreeSet<Integer>();
            int n1 = sc.nextInt();
            for(int i=0; i<n1; i++) {
                set.add(sc.nextInt());
            }
            int n2 = sc.nextInt();
            for(int i=0; i<n2; i++) {
                set.add(sc.nextInt());
            }
            for(Integer i : set) {
                System.out.print(i);
            }
            System.out.println();
        }
    }
}

发表于 2018-10-08 22:11:28 回复(0)
#include <bits/stdc++.h>
 using   namespace std;
int main()
{
    int n;
    while (cin >> n)
    {
        int m;
        vector<int> num1;
        for(int i=0;i<n;i++) 
        {
            cin>>m;
            num1.push_back(m);
        }
        int n1;
        cin>>n1;
        for(int i=0;i<n1;i++)
        {
            cin>>m;
            num1.push_back(m);
        }
        sort(num1.begin(),num1.end());
        cout<<num1[0];
        for(int i=1;i<num1.size();i++)
        {
            if(num1[i]!=num1[i-1])
                cout<<num1[i];
        }
        cout<<endl;
    }
    system("pause");
    return 0;
}

发表于 2018-08-07 21:51:38 回复(0)
#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main()
{
	int m,n;
	int buf;
	while(cin>>m)
	{
		vector<int>a;
		vector<int>b;
		vector<int>c;
		while(m--)
		{
			cin>>buf;
			a.push_back(buf);
		}
		cin>>n;
		while(n--)
		{
			cin>>buf;
			b.push_back(buf);
		}
		c=a;
		for(int i=0;i<b.size();i++)
		{
			if(find(c.begin(),c.end(),b[i])==c.end())
				c.push_back(b[i]);
		}
		sort(c.begin(),c.end());
		for(int i=0;i<c.size();i++)
		{
			cout<<c[i];
		}
		cout<<endl;
	}
       return 0;
}

发表于 2016-09-08 10:37:58 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            TreeSet<Integer> set = new TreeSet<Integer>();
            for(int i=0;i<n;i++){
                set.add(sc.nextInt());
            }
            int m = sc.nextInt();
            for(int i=0;i<m;i++){
                set.add(sc.nextInt());
            }
            Iterator it = set.iterator();
            StringBuffer sb = new StringBuffer();
            while(it.hasNext()){
                sb.append(it.next());
            }
            System.out.println(sb.toString());
        }
    }
}

发表于 2016-08-27 22:18:46 回复(0)
//去重排序问题 直接用map或者set容器是最方便的啦!
#include<iostream>
#include<set>
using namespace std;

int main()
{  int n;
   set<int> s;
    while(cin>>n)
    {
       int *a=new int[n];  
  for(int i=0;i<n;i++)
  {   cin>>a[i];
  s.insert(a[i]);
  }    
       int m;
       cin>>m; 
  int *b=new int[m];
       for(int i=0;i<m;i++)
       {   cin>>b[i];
  s.insert(b[i]);
  }    
      
  for(set<int> ::const_iterator p = s.begin(); p != s.end(); ++p)
           cout<<*p;
  //cout<<endl;这个测例没有回车
  s.clear();
    }
    
  return 0;  
}
//下面这个思路也不错
//#include<iostream>
//#include<vector>
//#include<algorithm>
//using namespace std;
//int main()
//{
//    int m,n;
//    int arr[10000];
//    while(cin>>m)
//    {
//        for(int i=0;i<m;++i)
//            cin>>arr[i];
//        cin>>n;
//        for(int i=m;i<m+n;++i)
//            cin>>arr[i];
//        sort(arr,arr+m+n);
//        for(int i=0;i<m+n;++i)
//        {
//            if(arr[i]!=arr[i+1])
//            {
//                cout<<arr[i];
//            }
//                 
//        }
//        cout<<endl;
//    }
//    return 0;
//}
发表于 2016-07-13 00:13:49 回复(0)