LeetCode 1244. 力扣排行榜(map+multiset)
文章目录
- 1. 题目
- 2. 解题
1. 题目
新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一个排行榜 Leaderboard。
请你帮忙来设计这个 Leaderboard 类,使得它有如下 3 个函数:
addScore(playerId, score)
:
假如参赛者已经在排行榜上,就给他的当前得分增加 score 点分值并更新排行。
假如该参赛者不在排行榜上,就把他添加到榜单上,并且将分数设置为 score。top(K)
:返回前 K 名参赛者的 得分总和。reset(playerId)
:将指定参赛者的成绩清零。题目保证在调用此函数前,该参赛者已有成绩,并且在榜单上。
请注意,在初始状态下,排行榜是空的。
示例 1:
输入:
["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]]
输出:
[null,null,null,null,null,null,73,null,null,null,141]
解释:
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;提示:
1 <= playerId, K <= 10000
题目保证 K 小于或等于当前参赛者的数量
1 <= score <= 100
最多进行 1000 次函数调用
来源:力扣(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)相关推荐
- 1244 力扣排行榜
题目描述: 新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一个排行榜 Leaderboard. 请你帮忙来设计这个 Leaderboard 类,使得它有如下 3 个函数: ...
- LeetCode 2020 力扣杯全国春季编程大赛(1644/4093,前40.2%)
文章目录 1. 比赛结果 2. 题目解析 2.1 拿硬币 Easy 2.2 传递信息 Esay 2.3 剧情触发时间 Medium 2.4 最小跳跃次数 Hard 2.5 二叉树任务调度 Hard 1 ...
- LeetCode(力扣)初级算法 字符串篇
目录 1.反转字符串 2.整数反转 2.1第一版代码 2.2第二版代码 3.字符串中的第一个唯一字符 3.1第一版代码 3.2第二版代码 3.3第三版代码 4.有效的字母异位词 4.1第一版代码 4. ...
- LeetCode 2019 力扣杯全国秋季编程大赛
文章目录 1. 比赛结果 2. 题目解析 2.1 猜数字 Easy 2.2 分式化简 Esay 2.3 机器人大冒险 Medium 2.4 覆盖 Hard 2.5 发 LeetCoin Hard 1. ...
- LeetCode 2021 力扣杯全国秋季编程大赛(第384名)
文章目录 1. 无人机方阵 2. 心算挑战 3. 黑白翻转棋 4. 玩具套圈 5. 十字路口的交通 2021.9.11,周六 比赛之前:早上去交大看看,本科毕业10年了,由于限流,校园里没有多少回校的 ...
- 【LeetCode - 1244】力扣排行榜
文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 2.解题思路 1.使用一个 HashMap 存储参赛者信息: 2.使用一个 Integer[] 存储参赛者分数从大到小排序的结 ...
- LeetCode 2020 力扣杯全国秋季编程大赛(656/3244,前20.2%)
文章目录 1. 比赛结果 2. 题目 1. LeetCode LCP 17. 速算机器人 easy 2. LeetCode LCP 18. 早餐组合 easy 3. LeetCode LCP 19. ...
- 【leetcode】力扣刷题(1):两数之和(Go、Python)
一.问题描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...
- LeetCode(力扣) 刷题注意事项 持续更新 ~ ~
文章目录 刷题无止境,那就让自己快乐一点 刷哪的题 抱前辈大腿 没有思路的题目 提交前检查代码 提交后 可以做的更好 在哪儿看题解 不要试图从题解的代码中理解思路 LeetCode的使用技巧 一次可以 ...
最新文章
- CmsEasy 漏洞挖掘
- react ant design路由配置
- delete postman 传参_PostMan 传参boolean 类型,接口接受的值一直是false
- java 根据类名示例化类_Java类类getProtectionDomain()方法及示例
- arduino智能浇花系统_arduino+水泵+继电器+RFID
- 32位、64汇编区别
- python画曲线图-如何使用python画曲线图
- 业界大佬患互联网手机焦虑症 圈地运动骤然爆发
- bufferedimage设置位深度_深度解读超级推荐自定义推广,快速上手最新推广利器!...
- c语言混响,混响插件( 2cAudio Aether)
- 大一c语言作业操作题库,c语言题目(大一c语言编程题库)
- hypersion oracle_Oracle Hyperion财务管理之合并报表
- 基于LSTM、KNN等模型的平安银行股价预测对比研究(python)
- 怎么手写 xpath
- linux让grep带颜色,在linux下给grep命令添加颜色
- 关于jQuery中的submit事件
- 《魔兽世界》营收出现大幅下滑
- 博弈论——合作博弈的Shapley值如何求解?
- mysqld_multi配置
- 笔记本出厂预装Win8改装Win7的操作步骤及常见问题___联想e430c之类可供参考