优秀成绩

作者: lyoungzzz | 来源:发表于2017-07-03 16:43 被阅读22次

描述

每个学生有两个属性 id 和 scores。找到每个学生最高的 5 个分数的平均值。

样例

给出 results = [[1,91],[1,92],[2,93],[2,99],[2,98],[2,97],[1,60],[1,58],[2,100],[1,61]]
返回:
1: 72.40
2: 97.40

代码实现

/**
 * Definition for a Record
 * class Record {
 *     public int id, score;
 *     public Record(int id, int score){
 *         this.id = id;
 *         this.score = score;
 *     }
 * }
 */
public class Solution {
    /**
     * @param results a list of <student_id, score>
     * @return find the average of 5 highest scores for each person
     * Map<Integer, Double> (student_id, average_score)
     */
    public Map<Integer, Double> highFive(Record[] results) {
        Map<Integer, Double> answers = new HashMap<>();
        Map<Integer, PriorityQueue<Integer>> hash = new HashMap<>();
        
        for (Record r : results) {
            if(!hash.containsKey(r.id)) {
                hash.put(r.id, new PriorityQueue<Integer>()); 
            }
            //不能加else,否则id第一次加出现入的数组中的成绩无法加入队列中
            //else {
            //这里的else可以的原因是if语句进行了第二次判断,由于第一次
            //加入了,如果原本hash不中存在的,此时肯定存在,便会将成绩加入队列
            //当然也可以省去这里的if语句
            if (hash.containsKey(r.id)) {   
                PriorityQueue<Integer> pq = hash.get(r.id);
                if (pq.size() < 5) {
                    pq.add(r.score);
                } else {
                    if (pq.peek() < r.score) {
                        pq.poll();
                        pq.add(r.score); 
                    }
                }
            }
        }
        //Map.Entry是Map的嵌套类
        // 使用Map.Entry是为了获取每次遍历时map的key和value,map没有该方法的实现
        //hash.entrySet()是为了匹配Map.Entry
        for (Map.Entry<Integer, PriorityQueue<Integer>> map : hash.entrySet()) {
            int id = map.getKey();
            PriorityQueue<Integer> score = map.getValue();
            double average = 0;
            for (int i = 0; i < 5; i++) {
                average += score.poll();
            }
                average /=  5.0;
                answers.put(id, average);
        }
        return answers;
        
    }
}

相关文章

  • 优秀成绩

    描述 每个学生有两个属性 id 和 scores。找到每个学生最高的 5 个分数的平均值。 样例 代码实现

  • 2019-07-05当下就好,未来更好。(124)

    学业成绩优秀有优秀的好,即使成绩不那么优秀,孩子也可以自信,健康,快乐,充满阳光;学业成绩如果优秀,那他就去追求属...

  • Python 19 多重条件判断

    例: 判断成绩是否 优秀、及格 思路: 如果成绩大于90分, 输出优秀 如果成绩大于等于60并小于90 输...

  • 有效“课程”的形成

    有效“课程”和优秀成绩并不是相一致的,有效的课程不一定会带来优秀的成绩,优秀的成绩也并不意味着课程一定是有...

  • 课程有效等同于成绩优秀吗

    有效“课程”和优秀成绩并不是相一致的,有效的课程不一定会带来优秀的成绩,优秀的成绩也并不意味着课程一定是有效的。这...

  • 不仅仅找个优秀的人

    找个优秀的人有什么用?别人的优秀跟你没有任何关系。也许外形优秀,也许内涵优秀,也许成绩优秀,也许家人优秀,...

  • 优秀生测试分析-2022-11-23

    收到优秀生测试成绩,第一感觉就是参加优秀生考试同学的数学成绩不高,名次靠后,也就是优秀生不优、不硬。不找借口,自查...

  • 考试成绩能判断学生优秀与否吗?

    考试成绩能判断学生优秀与否吗? 一、优秀的内涵 学习成绩能判断学生优秀与否吗?要回答这个问题,我们首先要明白何谓优...

  • 复课后第一次考试试卷分析(一语)

    一、成绩分析 本次测试共有48人,及格36人,及格率73.5%,优秀5人,优秀率4.9%。从成绩上看,学生存...

  • 偏见

    我打小成绩优秀,上小学时因为成绩优秀,小考结束成绩出来,我考了全市第三,在当年的小镇上名字被打在横条上拉在镇...

网友评论

    本文标题:优秀成绩

    本文链接:https://www.haomeiwen.com/subject/imhzcxtx.html