文章目录

  • 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)相关推荐

  1. 1244 力扣排行榜

    题目描述: 新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一个排行榜 Leaderboard. 请你帮忙来设计这个 Leaderboard 类,使得它有如下 3 个函数: ...

  2. LeetCode 2020 力扣杯全国春季编程大赛(1644/4093,前40.2%)

    文章目录 1. 比赛结果 2. 题目解析 2.1 拿硬币 Easy 2.2 传递信息 Esay 2.3 剧情触发时间 Medium 2.4 最小跳跃次数 Hard 2.5 二叉树任务调度 Hard 1 ...

  3. LeetCode(力扣)初级算法 字符串篇

    目录 1.反转字符串 2.整数反转 2.1第一版代码 2.2第二版代码 3.字符串中的第一个唯一字符 3.1第一版代码 3.2第二版代码 3.3第三版代码 4.有效的字母异位词 4.1第一版代码 4. ...

  4. LeetCode 2019 力扣杯全国秋季编程大赛

    文章目录 1. 比赛结果 2. 题目解析 2.1 猜数字 Easy 2.2 分式化简 Esay 2.3 机器人大冒险 Medium 2.4 覆盖 Hard 2.5 发 LeetCoin Hard 1. ...

  5. LeetCode 2021 力扣杯全国秋季编程大赛(第384名)

    文章目录 1. 无人机方阵 2. 心算挑战 3. 黑白翻转棋 4. 玩具套圈 5. 十字路口的交通 2021.9.11,周六 比赛之前:早上去交大看看,本科毕业10年了,由于限流,校园里没有多少回校的 ...

  6. 【LeetCode - 1244】力扣排行榜

    文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 2.解题思路   1.使用一个 HashMap 存储参赛者信息:   2.使用一个 Integer[] 存储参赛者分数从大到小排序的结 ...

  7. LeetCode 2020 力扣杯全国秋季编程大赛(656/3244,前20.2%)

    文章目录 1. 比赛结果 2. 题目 1. LeetCode LCP 17. 速算机器人 easy 2. LeetCode LCP 18. 早餐组合 easy 3. LeetCode LCP 19. ...

  8. 【leetcode】力扣刷题(1):两数之和(Go、Python)

    一.问题描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...

  9. LeetCode(力扣) 刷题注意事项 持续更新 ~ ~

    文章目录 刷题无止境,那就让自己快乐一点 刷哪的题 抱前辈大腿 没有思路的题目 提交前检查代码 提交后 可以做的更好 在哪儿看题解 不要试图从题解的代码中理解思路 LeetCode的使用技巧 一次可以 ...

最新文章

  1. CmsEasy 漏洞挖掘
  2. react ant design路由配置
  3. delete postman 传参_PostMan 传参boolean 类型,接口接受的值一直是false
  4. java 根据类名示例化类_Java类类getProtectionDomain()方法及示例
  5. arduino智能浇花系统_arduino+水泵+继电器+RFID
  6. 32位、64汇编区别
  7. python画曲线图-如何使用python画曲线图
  8. 业界大佬患互联网手机焦虑症 圈地运动骤然爆发
  9. bufferedimage设置位深度_深度解读超级推荐自定义推广,快速上手最新推广利器!...
  10. c语言混响,混响插件( 2cAudio Aether)
  11. 大一c语言作业操作题库,c语言题目(大一c语言编程题库)
  12. hypersion oracle_Oracle Hyperion财务管理之合并报表
  13. 基于LSTM、KNN等模型的平安银行股价预测对比研究(python)
  14. 怎么手写 xpath
  15. linux让grep带颜色,在linux下给grep命令添加颜色
  16. 关于jQuery中的submit事件
  17. 《魔兽世界》营收出现大幅下滑
  18. 博弈论——合作博弈的Shapley值如何求解?
  19. mysqld_multi配置
  20. 笔记本出厂预装Win8改装Win7的操作步骤及常见问题___联想e430c之类可供参考

热门文章

  1. Linux:守护进程解析、如何实现守护进程
  2. 分布式为什么使用Redis
  3. 单机 amp; 弱联网手游 防破解、金币改动 简单措施
  4. asp.net 的页面几种传值方式
  5. 【转载】Ubuntu终端常用的快捷键
  6. Makefile 基本知识
  7. iOS开发-自动隐藏键盘及状态栏
  8. socket异步处理问题
  9. 软件项目管理的质量保证
  10. file_table.c 文件分析 linux1_0\linux\fs\file_table.c