📅  最后修改于: 2023-12-03 14:56:31.508000             🧑  作者: Mango
TCS MockVita 2020 中的“碰撞课程”是一道面向程序员的编程练习题,适合那些已经掌握基本编程概念和技能,并希望进一步提高自己的算法和数据结构能力的开发者。
题目要求实现一个程序,根据给定的输入,对两个数组进行比较,找出其中的碰撞元素,即两个数组中都出现过的元素。输出结果应按照字典序递增的顺序排列。
输入的第一行包含两个整数 n 和 m,分别表示两个数组的长度。接下来的两行分别给出 n 个和 m 个整数,表示两个数组中的元素,元素大小在 [−10^9,10^9] 范围内,且保证两个数组中的元素各不相同。
在一行中按照字典序递增的顺序输出所有碰撞元素,每个元素之间用空格隔开。如果没有碰撞元素,则输出一个空行。
3 4
2 3 5
1 2 3 4
2 3
首先,需要将两个数组分别存放到两个数组中,然后再对两个数组进行遍历,找出其中的碰撞点。
具体实现步骤如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), m = sc.nextInt();
List<Integer> A = new ArrayList<>();
List<Integer> B = new ArrayList<>();
for (int i = 0; i < n; i++) {
A.add(sc.nextInt());
}
for (int i = 0; i < m; i++) {
B.add(sc.nextInt());
}
List<Integer> res = new ArrayList<>();
int i = 0, j = 0;
while (i < n && j < m) {
if (A.get(i).equals(B.get(j))) {
res.add(A.get(i));
i++;
j++;
} else if (A.get(i) < B.get(j)) {
i++;
} else {
j++;
}
}
Collections.sort(res);
for (int k = 0; k < res.size(); k++) {
if (k == 0) {
System.out.print(res.get(k));
} else {
System.out.print(" " + res.get(k));
}
}
}
}