LC: 1244. Design A Leaderboard
https://leetcode.com/problems/design-a-leaderboard/
1244. Design A Leaderboard
Design a Leaderboard class, which has 3 functions:
addScore(playerId, score): Update the leaderboard by addingscoreto the given player's score. If there is no player with such id in the leaderboard, add him to the leaderboard with the givenscore.top(K): Return the score sum of the topKplayers.reset(playerId): Reset the score of the player with the given id to 0 (in other words erase it from the leaderboard). It is guaranteed that the player was added to the leaderboard before calling this function.
Initially, the leaderboard is empty.
Example 1:
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]
Explanation:
Leaderboard leaderboard = new Leaderboard ();
leaderboard.addScore(1,73); // leaderboard = [[1,73]];
leaderboard.addScore(2,56); // leaderboard = [[1,73],[2,56]];
leaderboard.addScore(3,39); // leaderboard = [[1,73],[2,56],[3,39]];
leaderboard.addScore(4,51); // leaderboard = [[1,73],[2,56],[3,39],[4,51]];
leaderboard.addScore(5,4); // leaderboard = [[1,73],[2,56],[3,39],[4,51],[5,4]];
leaderboard.top(1); // returns 73;
leaderboard.reset(1); // leaderboard = [[2,56],[3,39],[4,51],[5,4]];
leaderboard.reset(2); // leaderboard = [[3,39],[4,51],[5,4]];
leaderboard.addScore(2,51); // leaderboard = [[2,51],[3,39],[4,51],[5,4]];
leaderboard.top(3); // returns 141 = 51 + 51 + 39;Constraints:
1 <= playerId, K <= 10000It's guaranteed that
Kis less than or equal to the current number of players.1 <= score <= 100There will be at most
1000function calls.
The Essence:
Weil die Methoden addScore und reset die Werte der Spieler ständig verändern, muss man einen effizienten Weg finden, bei welchem man die upgedatete und sortierte Liste der Spieler zurückgeben kann.
Details:
Man kann hier unterschiedliche Datenstrukturen verwenden:
Eine Array-basierte Liste ist schnell für binäre Suche aber langsam für Einfügungen.
2. Eine verkettete Liste ist umgekehrt schnell fĂĽr EinfĂĽgungen aber ineffizient fĂĽr EinfĂĽgungen. Reset oder Removal kann man mithilfe einer Hashtabelle leichter erledigen.
3. Binäre Suchbäume und andere Datenstrukturen können auch verwenden werden. Solche Datenstrukturen sind nicht nur bei binärer Suche effizient, sondern unterstützen auch effiziente Einfügung.
Solution(s):
Default Code:
Last updated