HJ25 数据分类处理


答案如下:
package everydayPractice.hash.HJ25;
import java.util.*;
/**
* Created by chelong on 2026/7/1
*/
public class AnswerMA {
public static void main(String[] args) {
ArrayList<String> arrI = new ArrayList<String>();//数据集合I,数据集合I不需要去重用ArrayList
LinkedHashSet<String> setR = new LinkedHashSet<>();//数据集合R,数据集合J需要去重用LinkedHashSet或者HashSet都可以
Scanner sc = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (sc.hasNextInt()) { // 注意 while 处理多个 case
//第一行总过有countOfI个I类型数据,
int countOfI = sc.nextInt();
for (int i = 0; i < countOfI; i++) {
arrI.add(String.valueOf(sc.nextInt()));
}
//第二行总过有countOfJ个R类型数据
int countOfJ = sc.nextInt();
for (int i = 0; i < countOfJ; i++) {
setR.add(String.valueOf(sc.nextInt()));
}
}
//把J类型数据重新排序
ArrayList<String> arrR = new ArrayList<String>();
for (String s : setR) {
arrR.add(s);
}
arrR.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return Integer.parseInt(o1) - Integer.parseInt(o2);
}
});
//满足全部规则的集合
LinkedList<List<String>> allResult = new LinkedList<List<String>>();
//先求每一个规则
int sum = 0;
int idx = 0;
for (String r : arrR) {
//只满足一个R 规则的集合,把每一个的索引和数字保存起来
LinkedList<String> partOfResult = new LinkedList<String>();
idx = 0;
sum = 0;
for (String i : arrI) {
if (i.contains(r)) {
sum++;
partOfResult.add(String.valueOf(idx));
partOfResult.add(String.valueOf(i));
}
idx++;
}
partOfResult.addFirst(String.valueOf(sum));
partOfResult.addFirst(String.valueOf(r));
if (sum>0){
allResult.add(partOfResult);//把每一个满足r规则的单独数据集合组装成大集合
}
}
int allSum = 0;//求整个大集合的数量
for (List<String> partList : allResult) {
for (String s : partList) {
allSum++;
}
}
//输出大集合的数量
System.out.print(allSum + " ");
for (List<String> partList : allResult) {
for (String s : partList) {
System.out.print(s + " ");
}
}
}
}
结果如下:


浙公网安备 33010602011771号