Сложность: easy
Дан список оценок различных студентов, items, где items[i] = [IDi, scorei] представляет собой одну оценку студента с идентификатором IDi. Вычислите среднее значение пяти лучших оценок каждого студента.
Верните ответ в виде массива пар result, где result[j] = [IDj, topFiveAveragej] представляет студента с идентификатором IDj и его среднее значение пяти лучших оценок. Отсортируйте result по IDj в порядке возрастания.
Среднее значение пяти лучших оценок студента вычисляется путем сложения его пяти лучших оценок и деления на 5 с использованием целочисленного деления.
Пример:
Input: items = [[1,100],[7,100],[1,100],[7,100],[1,100],[7,100],[1,100],[7,100],[1,100],[7,100]]
Output: [[1,100],[7,100]]
👨💻 Алгоритм:
1⃣Создайте словарь для хранения оценок каждого студента, где ключом будет ID студента, а значением — список его оценок. Переберите элементы в массиве items и добавьте каждую оценку в соответствующий список в словаре, используя ID студента как ключ.
2⃣Создайте список для хранения результата result. Переберите словарь и для каждого студента отсортируйте его оценки в порядке убывания, возьмите пять лучших оценок, вычислите их среднее значение (с целочисленным делением на 5) и добавьте пару [ID, topFiveAverage] в результат.
3⃣Отсортируйте список result по возрастанию ID студента и верните его.
😎 Решение:
class Solution {
func highFive(_ items: [[Int]]) -> [[Int]] {
let K = 5
let sortedItems = items.sorted {
if $0[0] != $1[0] {
return $0[0] < $1[0]
}
return $0[1] > $1[1]
}
var solution = [[Int]]()
var i = 0
while i < sortedItems.count {
let id = sortedItems[i][0]
var sum = 0
for k in i..<i+K {
sum += sortedItems[k][1]
}
while i < sortedItems.count && sortedItems[i][0] == id {
i += 1
}
solution.append([id, sum / K])
}
return solution
}
}Ставь 👍 и забирай 📚 Базу знаний