字节的校招笔试——作家作品打分

引言

作家作品打分
题目源自:力扣上的分享 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);
    }
posted @ 2021-05-13 16:17  心若向阳花自开  阅读(272)  评论(0编辑  收藏  举报