Java Amazon.com学生最终成绩

Java Amazon.com学生最终成绩,java,algorithm,sorting,amazon,complexity-theory,Java,Algorithm,Sorting,Amazon,Complexity Theory,这个问题是在Amazon.com采访的在线测试中提出的。确切的问题是: 给出测试结果列表(每个都有测试日期、学生ID和学生分数),返回每个学生的最终分数。学生的最终分数是他/她5个最高考试分数的平均值。你可以假设每个学生至少有5个考试分数 为您的解决方案使用以下框架 类测试结果{ 国际学生; 日期测试日期; int测试分数; } 公共地图GetFinalCores(列表结果列表){ 返回null; } 我的解决方案是这样的: 我创建了一个HashMap使用大小为5的minHeap 复杂性:O

这个问题是在Amazon.com采访的在线测试中提出的。确切的问题是:

给出测试结果列表(每个都有测试日期、学生ID和学生分数),返回每个学生的最终分数。学生的最终分数是他/她5个最高考试分数的平均值。你可以假设每个学生至少有5个考试分数

为您的解决方案使用以下框架

类测试结果{
国际学生;
日期测试日期;
int测试分数;
}
公共地图GetFinalCores(列表结果列表){
返回null;
}
我的解决方案是这样的:


  • 我创建了一个
    HashMap使用大小为5的
    minHeap


    复杂性:O(klogn),k=5==>O(logn)。和O(n+m),通常=O(max(n,m)。在你的例子中是O(n)。

    你的算法似乎有O(nLog(n))时间复杂度。您的树可以有任何大小,最坏情况下包括n。您可以不使用树,而是为每个学生id使用最小堆。每次添加第六项时,请删除最小值,以便它始终保持最佳5分


    正如Droider所解释的那样,这样可以保证以n为单位的线性时间。

    O(n+n)被减少到列表中的O(n)?为了获得五个最高的测试结果…最终分数意味着是“五个最好”的情况…最初,堆是空的,我们有一个大小=5。每次我们看到标记class TestResult{ int studentId; Date testDate; int testScore; } public Map<Integer, Double> getFinalScores(List<TestResult> resultList){ return null; }