Сложность: medium
Разработайте класс Leaderboard, который содержит 3 функции: addScore(playerId, score): Обновляет таблицу лидеров, добавляя счет к счету данного игрока. Если в таблице лидеров нет игрока с таким id, добавьте его в таблицу лидеров с заданным счетом. top(K): Возвращает сумму очков K лучших игроков. reset(playerId): Сбрасывает счет игрока с заданным идентификатором в 0 (другими словами, стирает его из таблицы лидеров). Гарантируется, что игрок был добавлен в таблицу лидеров до вызова этой функции. Изначально таблица лидеров пуста.
Пример:
Input:
["Leaderboard","addScore","addScore","addScore","addScore","addScore","top","reset","reset","addScore","top"]
[[],[1,73],[2,56],[3,39],[4,51],[5,4],[1],[1],[2],[2,51],[3]]
Output:
[null,null,null,null,null,null,73,null,null,null,141]
👨💻 Алгоритм:
1⃣addScore(playerId, score):
Если игрок уже существует в таблице лидеров, добавляем к его текущему счету новое значение.
Если игрок не существует, добавляем его с заданным счетом.
2⃣top(K):
Сортируем игроков по их счету в порядке убывания.
Возвращаем сумму очков K лучших игроков.
3⃣reset(playerId):
Устанавливаем счет игрока в 0.
😎 Решение:
class Leaderboard {
private $scores;
public function __construct() {
$this->scores = [];
}
public function addScore($playerId, $score) {
if (isset($this->scores[$playerId])) {
$this->scores[$playerId] += $score;
} else {
$this->scores[$playerId] = $score;
}
}
public function top($K) {
arsort($this->scores);
return array_sum(array_slice($this->scores, 0, $K));
}
public function reset($playerId) {
$this->scores[$playerId] = 0;
}
}Ставь 👍 и забирай 📚 Базу знаний