线上报警问题分类

82 阅读1分钟

题目:

在报警的时间范围内,小茗同学收到了NN名用户的反馈,每位用户编号为11到NN。小茗同学查询线上实验后,统计了用户命中实验的列表,第i位用户命中了ki个实验,第j个实验的编号为 ai,jai,j​。 这些用户的反馈不完全是由于一个问题造成的,因此小茗同学需要对这些问题进行分类。小茗同学根据先前的经验会进行 QQ 次询问尝试问题分类,第ii次询问给出一个序列bi,1,bi,2,…,bi,cibi,1​,bi,2​,…,bi,ci​​,cici​表示第ii次查询的实验数量。当bi,j>0bi,j​>0时表示命中实验∣bi,j∣∣bi,j​∣,否则表示未命中实验∣bi,j∣∣bi,j​∣,小茗同学需要得到符合这些条件的用户数。例如,序列 1,-2,3 表示命中实验 1,3 而没有命中实验 2 的用户数量。 解析·:public static List solution(int n, int m, int q, int[][] arrayN, int[][] arrayQ)
List<Set> userExperiments = new ArrayList<>();//初始化一个List来存储每个用户的实验集合 for (int i = 0; i < n; i++) { Set experiments = new HashSet<>();//遍历

        for (int j = 1; j <= arrayN[i][0]; j++) 
            experiments.add(arrayN[i][j]);  // 将用户命中的实验添加到Set中
        List<Integer> result = new ArrayList<>();//初始化结果列表
for (int i = 0; i < q; i++) {
        int count = 0;//遍历查询

for (int j = 1; j <= arrayQ[i][0]; j++) { int experiment = arrayQ[i][j]; if (experiment > 0)//如果实验编号为正,判断用户是否命中该实验,为负则未命中
if (match) { count++; }//如果用户满足查询条件,计数加1 result.add(count);//将满足条件的用户数量添加到结果列表中