一、题目描述
给定两个数组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的长度M
int M = in.nextInt();
// 数组B的长度N
int 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机考。专栏会持续更新,每天在线答疑。