一、题目描述
给定两个数组A和B,若数组A的某个元素A[i]与数组B中的某个元素B[j]满足 A[i] == B[j],则寻找到一个值匹配的二元组(i, j)。
请统计在这两个数组A和B中,一共存在多少个这样的二元组。
二、输入描述
第一行输入数组A的长度M;
第二行输入数组B的长度N;
第三行输入数组A的值;
第四行输入数组B的值。
1 <= M, N <= 100000
A, B数组中数值的取值均小于100000;
三、输出描述
输出匹配的二元组个数。
四、补充说明
若不存在相等的值,则输出0。
所采用的算法复杂度需小于O(N2),否则会超时。输入数组中允许出现重复数字,一个数字可以匹配多次。
五、Java算法源码
public static void main(String[] args) {Scanner in = new Scanner(System.in);// 数组A的长度Mint M = in.nextInt();// 数组B的长度Nint N = in.nextInt();//数组A的值int[] A = new int[M];for (int i = 0; i < M; i++) {A[i] = in.nextInt();}//数组B的值int[] B = new int[N];for (int i = 0; i < N; i++) {B[i] = in.nextInt();}Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (int a : A) {map.put(a, map.getOrDefault(a, 0) + 1);}int sum = 0;for (int b : B) {sum += map.getOrDefault(b, 0);}// 输出匹配的二元组个数System.out.print(sum);
}
六、效果展示
1、输入
5
4
1 2 3 4 5
4 3 2 1
2、输出
4
3、说明
若下标从0开始,则匹配的二元组分别为(0, 3), (1, 2), (2, 1), (3, 0), 共计4个。
🏆下一篇:华为OD机试真题 Java 实现【获得完美走位】【2023Q1 100分】
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。