There are two properties in the node student id
and scores
,
to ensure that each student will have at least 5 points, find the average of 5 highest scores for each person.
Example
java
Given results = [[1,91],[1,92],[2,93],[2,99],[2,98],[2,97],[1,60],[1,58],[2,100],[1,61]]
Return
/**
* 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) {
// Write your code here
if (results == null || results.length == 0) {
return null;
}
Map<Integer, PriorityQueue<Integer>> map = new HashMap<>();
Map<Integer, Double> res = new HashMap<>();
for (int i = 0; i < results.length; i++) {
if (map.containsKey(results[i].id)) {
if (map.get(results[i].id).size() < 5) {
map.get(results[i].id).offer(results[i].score);
} else {
map.get(results[i].id).offer(results[i].score);
map.get(results[i].id).poll();
}
} else {
PriorityQueue<Integer> heap = new PriorityQueue<>();
heap.offer(results[i].score);
map.put(results[i].id, heap);
}
}
for (int val : map.keySet()) {
int sum = 0;
while (!map.get(val).isEmpty()) {
sum += map.get(val).poll();
}
res.put(val, sum / 5.0);
}
return res;
}
}