算每个学生最高5个成绩的AVG.
1,建HashMap用PriorityQueue; 2,for each node{ put Map; 对每一个学生id建PriorityQueue; 加score; } 3,建AVG map (return type) for each id: keySet() 建PriorityQueue对每一个学生id; 算sum;
class Solution {
public static void main(String[] args) {
Solution test = new Solution();
Node n1 = new Node(2,100);
Node n2 = new Node(2,100);
Node n3 = new Node(2,100);
Node n4 = new Node(2,100);
Node n5 = new Node(2,100);
Node n6 = new Node(2,10);
Node n7 = new Node(1,100);
Node n8 = new Node(1,100);
Node n9 = new Node(1,100);
Node n10 = new Node(1,100);
Node n11 = new Node(1,100);
Node n12 = new Node(1,10);
ArrayList<Node> list2 = new ArrayList<Node>();
list2.add(n1);
list2.add(n2);
list2.add(n3);
list2.add(n4);
list2.add(n5);
list2.add(n6);
list2.add(n7);
list2.add(n8);
list2.add(n9);
list2.add(n10);
list2.add(n11);
list2.add(n12);
System.out.println(test.HighFive(list2));
}
public Map<Integer,Double> HighFive(List<Node> Scores){
Map<Integer, PriorityQueue<Integer>> map = new HashMap<Integer, PriorityQueue<Integer>>();
for(Node s:Scores){
map.putIfAbsent(s.id, new PriorityQueue<Integer>(5));
PriorityQueue<Integer> ss = map.get(s.id);
ss.offer(s.score);
if(ss.size()>5) ss.poll();
}
HashMap<Integer,Double> avg = new HashMap<Integer,Double>();
for(int id:map.keySet()){
PriorityQueue<Integer> pq = map.get(id);
double sum = 0;
for(int x:pq)
sum += x;
avg.put(id,sum/5);
}return avg;
}
}
class Node{
public int id;
public int score;
public Node(int id,int score){
this.id = id;
this.score =score;
}
public int getid(){
return id;
}
public int getscore(){
return score;
}
}