字节的校招笔试——作家作品打分
引言
作家作品打分
题目源自:力扣上的分享 https://leetcode-cn.com/circle/discuss/pUA0mL/
题目描述
某某作家有n本小说,评委会要对该作家的写作进行打分。需要从中挑选两本小说进行计分,计分规则如下:
- 每本小说有5个方面的评价指标
- 两本小说进行合并计分,每个方面的分数选两本小说高分作为这个方面的得分
- 两本小说可以从n本中任意挑选,然后选取合并计分后的五个方面的最低分作为该作家的得分。
要求求出小说家得分最高的两本小说的索引
测试样例与说明
2 3
1 2 3 4 5
2 3 4 5 6
5 4 3 2 1
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
预期答案
2 3
2 3
解释:
第一位小说家第2和第3本小说的综合得分为5 4 4 5 6,最低分为4分,因此选第2和第3本小说小说家得分为4分,是最高得分组合。
第二位小说家同理。
代码
/**
* @param m 小说家人数
* @param n 每位小说家作品数
* @param arrays 数组
*/
public static void f(int m, int n, int[][] arrays) {
for (int i = 0; i < m; i++) {
int a = 0, b = 0;
int maxScore = 0;
for (int j = i * n; j < (i + 1) * n - 1; j++) {
for (int k = j + 1; k < (i + 1) * n; k++) {
int score = getScore(arrays[j], arrays[k]);
if (maxScore <= score) {
maxScore = score;
a = j % n + 1;
b = k % n + 1;
}
}
}
System.out.println(a + " " + b);
}
}
/**
* 计算两本书的得分
* @param a
* @param b
* @return
*/
public static int getScore(int[] a, int b[]) {
int length = a.length;
int minScore = a[0];
for (int i = 0; i < length; i++) {
int score = a[i];
if (a[i] < b[i]) {
score = b[i];
}
if (minScore > score) {
minScore = score;
}
}
return minScore;
}
public static void main(String[] args) {
//m:小说家人数,
//n:每位小说家有n本书
int m = 2, n = 3;
int[][] a = {
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{5, 4, 3, 2, 1},
{1, 1, 1, 1, 1},
{2, 2, 2, 2, 2},
{3, 3, 3, 3, 3},
};
f(m, n, a);
}