这个问题是在Amazon.com面试的在线测试中提出的。确切的问题是:
给出一个测试结果列表(每个都有测试日期、学生ID和学生分数),返回每个学生的最终分数。学生的期末成绩是根据他/她5个最高考试分数的平均值计算出来的。你可以假设每个学生至少有5个考试成绩。 在解决方案中使用以下框架
class TestResult{
int studentId;
Date testDate;
int testScore;
}
public Map<Integer, Double> getFinalScores(List<TestResult> resultList){
return null;
}我的解决办法是这样:
HashMap<Integer, SortedSet<TestResult>的studentIdToResultSet。下面是我的问题:
我看到有人在@ Calculating the average?之前问过这个问题,但他很不清楚,也没有提供骨架。如果这违反了发帖规则,我提前表示歉意。
发布于 2013-02-25 17:07:05
使用大小为5的minHeap。
复杂度: O(klogn),k =5 ==> O(logn)。和O(n+m),一般= O(max(n,m) )。在你的例子中,它是O(n)。
发布于 2013-02-25 17:14:54
您的算法似乎具有O(nLog (n))时间复杂度。你的树可以有任何大小,包括最坏的情况下的n。不用使用树,您可以在每个学生id中使用最小堆。每次添加第六项后,删除最小值,使其始终保持最佳的5分。
就像Droider解释的那样,这样可以保证线性时间在n中。
https://stackoverflow.com/questions/15072245
复制相似问题