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;

    }
}

运行结果:

相关推荐
Crazyong2 分钟前
FreeRTOS-互斥量-2
算法
啊我不会诶9 分钟前
2025 北京市大学生程序设计竞赛暨“小米杯”全国邀请赛
c++·学习·算法
mit6.82412 分钟前
懒更新|单点查询
算法
Yupureki26 分钟前
《C++实战项目-高并发内存池》8. 最终性能优化与测试
c语言·开发语言·数据结构·c++·算法·性能优化
DeepModel31 分钟前
【概率分布】均匀分布的原理、推导与Python实现
python·算法·概率论
一叶落43831 分钟前
LeetCode 74 | 搜索二维矩阵(C语言版题解)
c语言·数据结构·c++·算法·leetcode·矩阵·动态规划
罗湖老棍子32 分钟前
星际信号塔 —— 单调栈经典应用详解
数据结构·算法·单调栈
iAkuya34 分钟前
(leetcode)力扣100 96.只出现一次的数字(位运算)
算法·leetcode·职场和发展
Tisfy39 分钟前
LeetCode 1622.奇妙序列:懒更新
数学·算法·leetcode·题解·设计
無限進步D39 分钟前
高精度算法 cpp
c++·笔记·算法·入门