這個問題是在Amazon.com面試的在線測試中。確切的問題是: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。 - 比較器將比較結果中的testScore,並返回1以獲得更高的分數,以便它將排序從最高到最低。
- 遍歷給定的搜索結果列表,並把所有的測試結果在地圖(檢查是否存在條目,如果是:添加設置,如果沒有:創建新組項目,並在列表中添加的結果
- 遍歷HashMap的,因爲我遍歷第5個集條目,並獲得平均每個條目,把在另一個HashMap的,這是我最終迴歸
現在,這裏是我的問題:
- 我不知道我的解決方案的複雜性(O)是什麼,我最好的猜測是它是O(n + n) ,但我不確定。
- 有沒有更好的解決這個問題的方法?
- 如果我爲問題添加了一個約束,返回的地圖必須按照學生排名的順序進行迭代,該怎麼辦?
P.S.我看到有人在@Calculating the average?之前問過這個問題,但他還不太清楚,並沒有提供骨架。如果這違反了發佈規則,我提前道歉。
O(N + N)降低到O(n)的 – 2013-02-25 17:06:01
爲什麼排序? – SparKot 2013-02-25 17:18:29
的名單?讓五最高的測試結果......最後的分數意味着是「五個最佳」場景...... – Eki 2013-02-26 01:09:21