LeetCode 1244. 力扣排行榜(map+multiset)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1244. 力扣排行榜(map+multiset)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
新一輪的「力扣杯」編程大賽即將啟動,為了動態顯示參賽者的得分數據,需要設計一個排行榜 Leaderboard。
請你幫忙來設計這個 Leaderboard 類,使得它有如下 3 個函數:
- addScore(playerId, score):
假如參賽者已經在排行榜上,就給他的當前得分增加 score 點分值并更新排行。
假如該參賽者不在排行榜上,就把他添加到榜單上,并且將分數設置為 score。 - top(K):返回前 K 名參賽者的 得分總和。
- reset(playerId):將指定參賽者的成績清零。題目保證在調用此函數前,該參賽者已有成績,并且在榜單上。
請注意,在初始狀態下,排行榜是空的。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/design-a-leaderboard
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
struct cmp {bool operator()(int a, int b) const{return a > b;} }; class Leaderboard {unordered_map<int,int> m;//id,scoremultiset<int, cmp> topk;//分數,降序排列 public:Leaderboard() {}void addScore(int playerId, int score) {if(m.find(playerId) == m.end()){m[playerId] = score;topk.insert(score);}else{auto it = topk.find(m[playerId]);topk.erase(it);//刪除分數m[playerId] += score;topk.insert(m[playerId]);//更新分數}}int top(int K) {int sum = 0;for(auto it = topk.begin(); it != topk.end() && K; ++it){K--;sum += (*it);}return sum;}void reset(int playerId) {auto it = topk.find(m[playerId]);topk.erase(it);m[playerId] = 0;topk.insert(0);} };28 ms 11.2 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 1244. 力扣排行榜(map+multiset)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 925. 长按键入(双
- 下一篇: LeetCode MySQL解题目录