Leetcode 1176 Solution

This article provides solution to leetcode question 1176 (design-a-leaderboard)

https://leetcode.com/problems/design-a-leaderboard

Solution

class Leaderboard { std::multiset<std::pair<int, int>> s; std::unordered_map<int, int> scores;
public: Leaderboard() { }
void addScore(int playerId, int score) { if (scores.find(playerId) != scores.end()) { s.erase(std::make_pair(scores[playerId], playerId));
int new_score = score + scores[playerId]; scores[playerId] = new_score; s.insert(std::make_pair(new_score, playerId)); } else { scores[playerId] = score; s.insert(std::make_pair(score, playerId)); } }
int top(int K) { int sum = 0; int i = 0; for (auto it = s.rbegin(); it != s.rend() && i < K; it++, i++) sum += it->first; return sum; }
void reset(int playerId) { s.erase(std::make_pair(scores[playerId], playerId)); scores.erase(playerId); } };
/** * Your Leaderboard object will be instantiated and called as such: * Leaderboard* obj = new Leaderboard(); * obj->addScore(playerId,score); * int param_2 = obj->top(K); * obj->reset(playerId); */