题目地址:
https://www.lintcode.com/problem/maximum-average-score/description
给定一个名字的列表和对应的分数列表,名字列表可能有重复,意味着有的学生有多个分数。求最高的同学的平均分。
代码如下:
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Solution {
/**
* @param names: the name
* @param grades: the grade
* @return: the maximum average score
*/
public double maximumAverageScore(List<String> names, int[] grades) {
// Write your code here
// key存名字,value的第0位存分数个数,第1位存总分
Map<String, double[]> map = new HashMap<>();
for (int i = 0; i < names.size(); i++) {
String name = names.get(i);
map.putIfAbsent(name, new double[]{0, 0});
double[] scores = map.get(name);
scores[0] += 1;
scores[1] += grades[i];
}
double res = 0;
for (Map.Entry<String, double[]> entry : map.entrySet()) {
double[] scores = entry.getValue();
res = Math.max(res, scores[1] / scores[0]);
}
return res;
}
}
时空复杂度 O ( n l ) O(nl) O(nl), n n n是列表长度, l l l是最长名字长度。