问题描述
给定两个数组a,b,若a[i] == b[j] 则称 [i, j] 为一个二元组,求在给定的两个数组中,二元组的个数。
输入描述:
第一行输入 m
第二行输入m个数,表示第一个数组
第三行输入 n
第四行输入n个数,表示第二个数组
输出描述:
二元组个数。
示例1:
输入:
4
1 2 3 4
1
1
输出:
1
说明:二元组个数为 1个
示例2:
输入:
4
1 1 2 2
3
2 2 4
输出:
4
说明:二元组个数为 4 个
个人解法
不保证通过率
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
/**
*
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int m = Integer.parseInt(br.readLine());
String[] ms = br.readLine().split(" ");
HashMap<Integer, Integer> mmap = new HashMap<>();
for (int i = 0; i < m; i++)
mmap.put(Integer.parseInt(ms[i]), mmap.getOrDefault(Integer.parseInt(ms[i]), 0) + 1);
int n = Integer.parseInt(br.readLine());
String[] ns = br.readLine().split(" ");
HashMap<Integer, Integer> nmap = new HashMap<>();
for (int i = 0; i < n; i++)
nmap.put(Integer.parseInt(ns[i]), nmap.getOrDefault(Integer.parseInt(ns[i]), 0) + 1);
int result = 0;
for (Map.Entry<Integer, Integer> entry : mmap.entrySet())
if (nmap.containsKey(entry.getKey())) result += nmap.get(entry.getKey()) * entry.getValue();
System.out.println(result);
}
}