某个产品当前迭代周期内有 N 个特性(F1, F2, ..., FN)需要进行覆盖测试,每个特性都被评估了对应的优先级,特性使用其 ID 作为下标进行标识。
设计了 M 个测试用例(T1, T2, ..., TN ),每个用例对应了一个覆盖特性的集合,测试用例使用其 ID 作为下标进行标识,测试用例的优先级定义为其覆盖的特性的优先级之和。
在开展测试之前,需要制定测试用例的执行顺序,规则为:优先级大的用例先执行,如果存在优先级相同的用例,用例 ID 小的先执行。
输入描述:第一行输入为 N 和 M ,N 表示特性的数量,M 表示测试用例的数量,0<N<=100 ,0<M<=100;之后 N 行表示特性 ID=1 到特性 ID=N 的优先级。再接下来 M 行表示测试用例 ID=1 到测试用例 ID=M 关联的特性的 ID 的列表。
输出描述:按照执行顺序(优先级从大到小)输出测试用例的 ID,每行一个 ID。
测试用例覆盖的 ID 不重复。
5 4
1
1
2
3
5
1 2 3
1 4
3 4 5
2 3 4
人话:给你特性数量,测试用例数量,然后特性数量个特性,测试用例数量个测试用例组,计算测试用例组数据-1对应特性数量索引,找对应位置,求特性和,然后按特性降序,id升序排序,之后返回id。
import java.util.*;
public class Main{
public static void main(String[] args){
// N 个特性,M 个测试用例(每个用例对应了一个覆盖特性的集合), ID 作为下标
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
sc.nextLine();
int[] nArray = new int[n];
for(int i = 0;i < nArray.length;i++){
nArray[i] = sc.nextInt();
}
sc.nextLine();
String[] mArray = new String[m];
for(int i = 0;i < mArray.length;i++){
mArray[i] = sc.nextLine();
}
//id加优先级的map
Map<Integer,Integer> indexPri = new HashMap<>();
for(int i = 0;i < m;i++){
int pri = 0;
String[] number = mArray[i].trim().split(" ");
for(int j = 0;j < number.length;j++){
pri += nArray[Integer.parseInt(number[j]) - 1];
}
indexPri.put(i,pri);
}
List<Integer> res = new ArrayList<>(indexPri.keySet());
res.sort((a,b)->{
int count = indexPri.get(b) - indexPri.get(a);
if(count == 0){
return Integer.compare(a,b);
}
return count;
});
for(int i = 0; i < res.size();i++){
System.out.println(res.get(i) + 1);
}
}
}