华为OD【找出两个整数数组中同时出现的整数】
import java.util.Scanner;
import java.util.*;
import java.util.HashMap;
public class Demo {
public static void main(String[] args) {
/*
5,8,11,3,6,8,8,-1,11,2,11,11
11,2,11,8,6,8,8,-1,8,15,3,-9,11
5,3,6,-8,0,11
2,8,8,8,-1,15
1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6
1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6
1,1,1,1,1,1,1
2,2,2,2,2,2,2
1
1
1
2
*/
Scanner scanner = new Scanner(System.in);
String s1 = scanner.nextLine();
String s2 = scanner.nextLine();
if(s1.length() == 0 || s2.length() == 0){
System.out.print("NULL");
return;
}
String[] nums1 = s1.split(",");
String[] nums2 = s2.split(",");
HashMap<Integer,Integer> map1 = new HashMap<>();
for (String s : nums1) {
map1.put(Integer.parseInt(s), map1.getOrDefault(Integer.parseInt(s), 0) + 1);
}
HashMap<Integer,Integer> map2 = new HashMap<>();
for (String s : nums2){
map2.put(Integer.parseInt(s),map2.getOrDefault(Integer.parseInt(s),0) + 1);
}
TreeMap<Integer,ArrayList<Integer>> treeMap = new TreeMap<>();
for(Integer key : map1.keySet()){
if(map2.containsKey(key)){
//共同出现的次数
int times = Math.min(map2.get(key),map1.get(key));
ArrayList<Integer> integers = treeMap.get(times);
if(integers == null){
integers = new ArrayList<>();
integers.add(key);
treeMap.put(times,integers);
}else{
integers.add(key);
}
}
}
if(treeMap.isEmpty()){
System.out.print("NULL");
return;
}
int num = 0;
for(Map.Entry<Integer,ArrayList<Integer>> entry : treeMap.entrySet()){
num++;
StringBuilder sb = new StringBuilder();
sb.append(entry.getKey()).append(":");
entry.getValue().forEach(value->{
sb.append(value).append(",");
});
System.out.print(sb.substring(0,sb.toString().length() - 1));
if(num != treeMap.size()){
System.out.println();
}
}
}
}