题解 | #数据分类处理#
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
import java.util.*;
public class Main {
public static void main(String[] args) {
//输入
Scanner in = new Scanner(System.in);
int inum = in.nextInt();
//序列I
int[] iints = new int[inum];
for (int i = 0; i < inum; i++) {
iints[i] = in.nextInt();
}
int rnum = in.nextInt();
//序列R
int[] rints = new int[rnum];
for (int i = 0; i < rnum; i++) {
rints[i] = in.nextInt();
}
HashMap<Integer, String> map1 = new
HashMap<>();//记录每个R<i>与其对应的I值
HashMap<Integer, Integer> map2 = new
HashMap<>();//记录每个R<i>存在I值的数量
//对R<i>去重并排序
sort(rints);
//遍历数据 并存入
for (int i = 0; i < rints.length; i++) {
if (i >= 1 && rints[i] == rints[i - 1]) {
continue;
}
Integer integer = Integer.valueOf(rints[i]);
String s = String.valueOf(integer);
for (int j = 0; j < iints.length; j++) {
String s1 = String.valueOf(iints[j]);
//包含
if (s1.contains(s)) {
//添加值
String s2 = map1.get(integer);
String k = j + " " + s1;//索引值+对应的I
if (s2 != null) {
map1.put(integer, s2 + " " + k);
} else {
map1.put(integer, k);
}
//计数
Integer integer1 = map2.get(integer);
if (integer1 != null) {
map2.put(integer, integer1 + 1);
} else {
map2.put(integer, 1);
}
}
}
}
String result = "";
for (int i = 0; i < rints.length; i++) {
if (i >= 1 && rints[i] == rints[i - 1]) {
continue;
}
Integer integer = Integer.valueOf(rints[i]);
if (null != map2.get(integer)) {
String s = String.valueOf(integer);
result += " " + s + " " + map2.get(integer) + " " + map1.get(integer);
}
}
int length = result.split(" ").length - 1;
System.out.print(length + result);
}
private static void sort(int[] rints) {
int length = rints.length;
for (int i = 0; i < length; i++) {
for (int j = 0; j < length - i - 1; j++) {
if (rints[j] > rints[j + 1]) {
//交换
int tmp = rints[j];
rints[j] = rints[j + 1];
rints[j + 1] = tmp;
}
}
}
}
}
解题思路:
1, 整体数据梳理过程稍显复杂, 考虑将其拆解进行处理,
2, 最终输出时的排序和去重, 使用R<i>数组进行控制,
3, 数据的梳理组合在整体遍历时进行处理
vivo公司福利 698人发布