优秀成绩

描述

每个学生有两个属性 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;
        
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 大学毕业后的张凯赋闲在家,他觉得除了找工作,应该去学一点什么技术或者考个什么证书。思前想后,他觉得去报读法律培训机...
    认真霸气妮阅读 354评论 0 0
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,319评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,877评论 18 399
  • 一、表单 ##1.表单的作用HTML 表单用于接收不同类型的用户输入,用户提交表单时向服务器传输数据,从而实现用户...
    饥人谷_Reawei阅读 367评论 0 0