Leetcode会员尊享面试100题:1086:前五科的均分

给你一个不同学生的分数列表 items,其中 items[i] = [IDi, scorei] 表示 IDi 的学生的一科分数,你需要计算每个学生 最高的五科 成绩的 平均分

返回答案 result 以数对数组形式给出*,* 其中result[j] = [IDj, topFiveAveragej]表示IDj的学生和他 最高的五科 成绩的 平均分 result需要按IDj递增的 顺序排列

学生 最高的五科 成绩的 平均分 的计算方法是将最高的五科分数相加,然后用 整数除法 除以 5 。

示例 1:

复制代码
输入:items = [[1,91],[1,92],[2,93],[2,97],[1,60],[2,77],[1,65],[1,87],[1,100],[2,100],[2,76]]
输出:[[1,87],[2,88]]
解释:
ID = 1 的学生分数为 91、92、60、65、87 和 100 。前五科的平均分 (100 + 92 + 91 + 87 + 65) / 5 = 87
ID = 2 的学生分数为 93、97、77、100 和 76 。前五科的平均分 (100 + 97 + 93 + 77 + 76) / 5 = 88.6,但是由于使用整数除法,结果转换为 88

示例 2:

复制代码
输入:items = [[1,100],[7,100],[1,100],[7,100],[1,100],[7,100],[1,100],[7,100],[1,100],[7,100]]
输出:[[1,100],[7,100]]

提示:

  • 1 <= items.length <= 1000
  • items[i].length == 2
  • 1 <= IDi <= 1000
  • 0 <= scorei <= 100
  • 对于每个 IDi至少 存在五个分数

题目比较简单,我们不知道在考啥,直接上代码,看不懂留言或者私信

java 复制代码
class Solution {
    /**这什么乱七八糟的题啊,看着都懵,我猜不出什么解法,但是数据了这么小,
    怎么写都能过吧 */
    public int[][] highFive(int[][] items) {
        /**题目规定items的length至少有1,每个id又至少有5个分数
        这不扯淡吗,自相矛盾,所以边界我不管了 */
        /**先排个序,如果id不同按id从小到大排序,如果id相同按分数从大到小排序*/
        Arrays.sort(items, (a, b)->a[0] == b[0]? b[1] - a[1] : a[0] - b[0]);
        /**然后就挨个遍历呗,每个id只收前五个,收完的平均分放到原数组的前面,所以
        我们需要定义一个index代表当前数组的长度(也是下一个要放的位置)*/
        int index = 0;
        /**当前累计的和 */
        int curSum = 0;
        /**当前id已经统计过几门课的分数 */
        int curCount = 0;
        /**当前统计的id是啥 */
        int preId = 0;
        for(int[] item : items) {
            /**换成新的id,当然所有的都从头起*/
            if(item[0] != preId) {
                curSum = item[1];
                curCount = 1;
                preId = item[0];
            } else {
                /**还是这门课,但是我们前五名统计完了,剩下的直接跳过 */
                if(curCount == 5) {
                    continue;
                }
                /**不够的情况count++,curSum加上当前课的分数 */
                curSum += item[1];
                curCount ++;
                /**加完之后够五个了,收集数据 */
                if(curCount == 5) {
                    items[index][0] = preId;
                    items[index ++][1] = curSum / 5;
                }
            }
        }
        /**定义结果 */
        int[][] result = new int[index][2];
        /**拷贝结果到结果数组 */
        System.arraycopy(items,0,result,0, index);
        return result;

    }
}

运行结果:

相关推荐
江畔柳前堤3 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Forever Nore4 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考6 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX6 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面7 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号7 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽7 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI7 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者9 小时前
征程6工具链模型X86推理方式说明
算法
地平线开发者9 小时前
【征程6】校准量化中HistogramObserver解析
算法