首页 > 试题广场 >

集合

[编程题]集合
  • 热度指数:30491 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给你两个集合,要求{A} + {B}。 注:同一个集合中不会有两个相同的元素。

输出时按数字升序输出。

数据范围: ,集合中的元素满足

输入描述:
每组输入数据分为三行,第一行有两个数字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
import java.util.Scanner;
import java.util.Arrays;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
       // 注意 haskNext 和 hasNextLine 的区别
        int na = in.nextInt(); int nb = in.nextInt();

        byte[] map = new byte[100000];

        int max = 0;

        for (int i = 0; i < na + nb; i++) {
            int n = in.nextInt();

            if (n > max) max = n;

            map[n] = 1;
        }

        for (int i = 0; i < 100000; i++)
            if (map[i] == 1)
                System.out.print(i == max ? i : i + " ");
    }
}
类似bitmap 的思路,读到哪个数就把哪一位置 1,这样解决了重复问题,辅助变量 max 记录最大元素的下标,方便格式输出
编辑于 2024-02-24 21:55:59 回复(0)
import java.util.*;
public class Main {
	public static void main(String args[]){
		Scanner in = new Scanner(System.in);
        int n = in.nextInt(), m = in.nextInt();
        TreeSet<Integer> set = new TreeSet();   // 最普通的自然排序
        for(int i=0;i<n+m;i++){
            set.add(in.nextInt());
        }
        for(Integer it : set){
            System.out.print(it+" ");
        }
    }
}

发表于 2021-09-22 18:41:38 回复(0)
package niuke.june.test0614;
//集合...本身就没有重复,默认自然排序
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class TestSet {

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int [] A =new int[n];
        int [] B =new int[m];
        for(int i = 0;i < n;i++)
            A[i] = sc.nextInt();
        for(int b = 0;b < m;b++)
            B[b] = sc.nextInt();
        Set <Integer> S= new TreeSet<Integer>();
        for(int a = 0;a < n;a++)
            S.add(A[a]);
        for(int b = 0;b < m;b++)
            S.add(B[b]);
        Iterator<Integer> it= S.iterator();
        for(int out = 0;out < S.size()-1;out++)
            System.out.print(it.next()+" ");
        System.out.println(it.next());
    }
}

发表于 2018-07-27 17:36:49 回复(0)
TreeSet实现排序和集合
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class Main{
     public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();

        int []a = new int[n];
        int []b = new int[m];

        for (int i = 0;i < n;i ++) {
            a[i] = scanner.nextInt();
        }

        for (int i = 0;i < m;i ++) {
            b[i] = scanner.nextInt();
        }
        Object []res = merge(a, b);
        for (int i = 0;i < res.length;i ++) {
            if (i == res.length - 1) {
                System.out.print(res[i]);
            }else {
                System.out.print(res[i] + " ");
            }
        }
    }

    public static Object[] merge(int []a, int []b) {
        Set<Integer> set = new TreeSet<>();
        for (int i : a) {
            set.add(i);
        }
        for (int i : b) {
            set.add(i);
        }
        Object[] res = set.toArray();
        return res;
    }
}

发表于 2018-06-06 21:51:10 回复(0)

运行时间:580ms
占用内存:26568k

import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            int n = scan.nextInt();// 集合A的元素个数
            int m = scan.nextInt();// 集合B的元素个数
            int[] arr1 = new int[n];
            int[] arr2 = new int[m];
            for (int i = 0; i < n; i++) {
                arr1[i] = scan.nextInt();
            }
            for (int i = 0; i < m; i++) {
                arr2[i] = scan.nextInt();
            }
            Set set = new TreeSet();
            for (int i = 0; i < arr1.length; i++) {
                set.add(arr1[i]);
            }
            for (int i = 0; i < arr2.length; i++) {
                set.add(arr2[i]);
            }
            Object[] o = set.toArray();
            for (int i = 0; i < o.length - 1; i++) {
                int temp = (int) o[i];
                System.out.print(temp + " ");
            }
            System.out.print((int) o[o.length - 1]);
        }
    }
}

一开始也用的Iterator迭代器遍历最后的TreeSet,但是没想到最后一个数字后的空格如何去除,就用了TreeSet.toArray() 的方法遍历输出了最后的set。看了一下大家的代码,也有用了iterator遍历出来了答案。而且很简洁,学习了!(就是下面这个~)
链接:https://www.nowcoder.com/questionTerminal/635ff765d4af45b5bf8e3756ed415792
来源:牛客网

while(it.hasNext()){
System.out.print(it.next());
if(it.hasNext())
System.out.print(" ");
}

编辑于 2018-04-30 16:29:05 回复(0)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Combine {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int m=sc.nextInt();
        int n=sc.nextInt();
        ArrayList<Integer>list1=new ArrayList<Integer>();
        for(int i=0;i<m+n;i++){
            int t=sc.nextInt();
            if(!list1.contains(t))
                list1.add(t);
        }
    Integer []a=new Integer[list1.size()]; 
        list1.toArray(a);     
         Arrays.sort(a);
         for(int i=0;i<a.length;i++){
             System.out.print(a[i]);
             if(i!=a.length-1)
               System.out.print(" ");
         }
       sc.close(); 
    }
}

发表于 2018-03-19 20:37:03 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        ArrayList<Integer> list1 = new ArrayList<>();
        for (int i = 0; i < n; ++i) {
            list1.add(sc.nextInt());
        }
        ArrayList<Integer> list2 = new ArrayList<>();
        for (int i = 0; i < m; ++i) {
            list2.add(sc.nextInt());
        }
        TreeSet<Integer> ts = new TreeSet<>();
        ts.addAll(list1);
        ts.addAll(list2);
        int size = ts.size();
        int i = 0;
        for (Integer val : ts) {
            System.out.print(val);
            if (i != (size - 1)) {
                System.out.print(" ");
            }
            ++i;
        }
    }
}

发表于 2018-03-14 20:14:07 回复(0)
//能用库函数的尽量用,效率高
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int countA = in.nextInt();
            int countB = in.nextInt();
            TreeSet<Integer> set = new TreeSet<>();
            for (int i = 0; i < countA + countB; i++)
                set.add(in.nextInt());
            Iterator<Integer> it = set.iterator();
            while (it.hasNext()) {
                System.out.print(it.next());
                if (it.hasNext()) System.out.print(" ");
            }
            System.out.println();
        }
    }
}
---------------------------------------------------------------------
//先排序,然后去重
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int countA = in.nextInt();
            int countB = in.nextInt();
            int[] array = new int[countA + countB];
            for (int i = 0; i < countA + countB; i++)
                array[i] = in.nextInt();
            Arrays.sort(array);
            int[] res = new int[array.length];
            int index = 0;
            for (int i = 0; i < array.length; i++) {
                if (i == 0 || array[i] != array[i-1])
                    res[index++] = array[i];
            }
            for (int i = 0; i < index; i++) {
                if (i < index - 1)
                    System.out.print(res[i] + " ");
                else
                    System.out.println(res[i]);
            }
        }
    }
}

编辑于 2017-12-27 15:42:03 回复(0)
import java.util.Iterator;
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);
        int alen = sc.nextInt();
        int blen = sc.nextInt();
        Set<Integer> set= new TreeSet<Integer>();
        for(int i=0;i<alen;i++){
            set.add(sc.nextInt());
        }
        for(int j=0;j<blen;j++){
            set.add(sc.nextInt());
        }
        Iterator<Integer> iterator = set.iterator();
        while(iterator.hasNext()){
            System.out.print(iterator.next());
            if(iterator.hasNext()){
                System.out.print(" ");
            }
        }
    }
}
发表于 2017-09-21 14:36:45 回复(0)
将输入的数据全部都保存到TreeSet中就可以了;TreeSet集合中的数据无重复,而且默认按照自然排序进行升序;不过TreeSet集合没有get方法,所以想要获取它的元素就需要使用迭代对象iterator:
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(" ");
			}
		}
	}
}

编辑于 2017-09-07 18:51:01 回复(4)
用一个优先级队列可以解决
import java.util.PriorityQueue;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner cin = new Scanner(System.in);

		int n = cin.nextInt();
		int m = cin.nextInt();

		PriorityQueue<Integer> queue = new PriorityQueue<>();
		for (int i = 0; i < m + n; i++) {
			int item = cin.nextInt();
			if (!queue.contains(item))
				queue.offer(item);
		}

		boolean isFirst = true;
		while (!queue.isEmpty()) {
			if (isFirst) {
				isFirst = !isFirst;
				System.out.print(queue.poll());
			} else
				System.out.print( " "+ queue.poll() );
		}

	}
}

发表于 2017-09-05 01:29:44 回复(0)
package com.nowcoder.jd;

import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

public class JiHe {

public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
while (scanner.hasNext()) {
int n = scanner.nextInt();
int m = scanner.nextInt();
TreeSet<Integer> set = new TreeSet<>();
int total = m + n;
for (int i = 0; i < total; i++) {
set.add(scanner.nextInt());
}
Iterator<Integer> it = set.iterator();
while (it.hasNext()) {
System.out.print(it.next());
if (it.hasNext())
System.out.print(" ");
}
System.out.println();
}
}
}

}

发表于 2017-08-12 22:16:29 回复(0)
后面没时间了偷了个懒用TreeSet来做
import java.util.Compardator;
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
TreeSet s = new TreeSet();
int m = input.nextInt();
int m2 = input.nextInt();
for(int i = 0;i<m+m2;i++){
s.add(input.nextInt());
}
int h = (int) s.last();
s.remove(h);
Iterator it = s.iterator();
while(it.hasNext()){
System.out.print(it.next()+" ");
}
System.out.print(h);
}

}

发表于 2017-07-17 14:16:58 回复(0)