📜  碰撞课程| TCS MockVita 2020(1)

📅  最后修改于: 2023-12-03 14:56:31.508000             🧑  作者: Mango

碰撞课程| TCS MockVita 2020

TCS MockVita 2020 中的“碰撞课程”是一道面向程序员的编程练习题,适合那些已经掌握基本编程概念和技能,并希望进一步提高自己的算法和数据结构能力的开发者。

题目描述

题目要求实现一个程序,根据给定的输入,对两个数组进行比较,找出其中的碰撞元素,即两个数组中都出现过的元素。输出结果应按照字典序递增的顺序排列。

输入格式

输入的第一行包含两个整数 n 和 m,分别表示两个数组的长度。接下来的两行分别给出 n 个和 m 个整数,表示两个数组中的元素,元素大小在 [−10^9,10^9] 范围内,且保证两个数组中的元素各不相同。

输出格式

在一行中按照字典序递增的顺序输出所有碰撞元素,每个元素之间用空格隔开。如果没有碰撞元素,则输出一个空行。

输入样例
3 4
2 3 5
1 2 3 4
输出样例
2 3
解题思路

首先,需要将两个数组分别存放到两个数组中,然后再对两个数组进行遍历,找出其中的碰撞点。

具体实现步骤如下:

  1. 将两个数组分别存入两个 List 中,且保证 List 中的元素可以按照字典序递增排列;
  2. 使用两个指针分别指向两个 List 的首元素,当两个元素相同时,则将该元素加入到结果 List 中,两个指针同时向后移动;如果两个元素不相同,则将元素较小的指针向后移动一个位置;
  3. 遍历结束后,将结果 List 中所有的元素按照字典序递增的顺序输出即可。
代码示例
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));
            }
        }
    }

}