给你两个集合,要求{A} + {B}。 注:同一个集合中不会有两个相同的元素。
输出时按数字升序输出。
数据范围:
,集合中的元素满足 ![](https://www.nowcoder.com/equation?tex=1%20%5Cle%20val%20%5Cle%2010%5E5%20%5C)
每组输入数据分为三行,第一行有两个数字n,m,分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超过int范围的整数,每个元素之间有个空格隔开。
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开,行末无空格。
3 3 1 3 5 2 4 6
1 2 3 4 5 6
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 + " "); } }
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+" "); } } }
}
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; } }
运行时间: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(" ");
}
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; } } }
//能用库函数的尽量用,效率高 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]); } } } }
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(" "); } } } }
用一个优先级队列可以解决 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() ); } } }
后面没时间了偷了个懒用TreeSet来做