这个问题是关于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>
。现在我的问题是:
P.S。我看到有人在@ Calculating the average?之前提出了这个问题,但他不太清楚,并没有提供骷髅。如果这违反了发布规则,我提前道歉。
答案 0 :(得分:2)
使用大小为5的minHeap
复杂性:O(klogn),k = 5 ==&gt; O(LOGN)。而O(n + m),一般= O(max(n,m)。在你的情况下是O(n)。
答案 1 :(得分:1)
您的算法似乎具有O(nLog(n))时间复杂度。你的树可以有任何大小,包括在最坏的情况下n。您可以使用每个学生ID的最小堆,而不是使用树。每次向其添加第六个项目时,请删除之后的最小值,以便始终保持最佳的5个分数。
正如Droider所解释的那样,这样就可以保证n的线性时间。