【发布时间】:2013-02-10 21:47:37
【问题描述】:
这个问题是针对 Amazon.com 面试的在线测试。确切的问题是:
给定一个测试结果列表(每个都带有测试日期、学生 ID 和学生的分数),返回每个学生的最终分数。学生的最终分数是他/她的 5 个最高考试分数的平均值。您可以假设每个学生至少有 5 个考试成绩。
为您的解决方案使用以下框架
class TestResult{
int studentId;
Date testDate;
int testScore;
}
public Map<Integer, Double> getFinalScores(List<TestResult> resultList){
return null;
}
我的解决方案是这样的:
- 我创建了一个名为 studentIdToResultSet 的
HashMap<Integer, SortedSet<TestResult>。 - Comparator 将比较结果中的 testScore,并为较高的分数返回 1,以便从高到低排序。
- 遍历给定的结果列表并将所有测试结果放入映射中(检查条目是否存在,如果存在:添加到集合中,如果不存在:使用新集合创建条目并将结果添加到列表中。
- 遍历 HashMap,对于每个条目,我都会遍历前 5 个集合条目并获得平均值,然后将其放入另一个 HashMap,我最终将其返回。
现在是我的问题:
- 我不知道我的解决方案的复杂性 (O) 是什么。我最好的猜测是 O(n+n),但我不确定。
- 这个问题有更优化的解决方案吗?
- 如果我在问题中添加一个约束条件,即返回的地图必须按照学生排名的顺序进行迭代,该怎么办?
附:我看到有人在@Calculating the average?之前问过这个问题,但他很不清楚,并没有提供骨架。如果这违反了发布规则,我提前道歉。
【问题讨论】:
-
O(n+n) 减少到 O(n)
-
在列表中?获得五个最高的测试结果...最终得分是“五个最好”的场景...
标签: java algorithm sorting amazon complexity-theory