跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

506. Relative Ranks 相对排名

相对排名问题要求根据运动员得分确定名次,前三名分别授予金、银、铜牌,其余按分数排序输出数字。解决方案利用优先队列或有序映射(Map)对得分进行降序排列,同时保留原始索引以填充结果数组。时间复杂度取决于排序效率,空间复杂度为 O(N)。

雪落无声发布于 2017/2/12更新于 2026/9/262 浏览
506. Relative Ranks 相对排名

题目描述

Given scores of N athletes, find their relative ranks and the people with the top three highest scores, who will be awarded medals: "Gold Medal", "Silver Medal" and "Bronze Medal".

示例

输入: [5, 4, 3, 2, 1] 输出: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"] 说明: 前两名运动员获得了最高的三个分数,因此他们获得了'金牌'、'银牌'和'铜牌'。对于剩下的两名运动员,只需根据他们的分数输出相对排名即可。

思路

对于给定的得分情况,找出前三名并给予相应的称号,其余以数字作为其名称。利用优先队列进行记录每个元素的位置和元素值,优先队列的特点是 top 始终是所有元素中最大的那个。

第二种方法,可以用 map 来解决,将 nums 中的元素值作为 map 的 key 从而实现将 nums 排序,同时保存 nums 的 index 到 map 中。

代码实现

方法一:优先队列
class Solution {
public:
    vector<string> findRelativeRanks(vector<int>& nums) {
        vector<string> res(nums.size());
        priority_queue<pair<int, int>> temp;
        for (size_t i = 0, len = nums.size(); i < len; ++i) {
            temp.push({nums[i], i});
        }
        int count = 1;
        while (temp.size()) {
            auto elem = temp.top();
            temp.pop();
            if (count == 1) res[elem.second] = "Gold Medal";
            else if (count == 2) res[elem.second] = "Silver Medal";
            else if (count == 3) res[elem.second] = "Bronze Medal";
            else res[elem.second] = to_string(count);
            ++count;
        }
        return res;
    }
};
方法二:有序映射
class Solution {
public:
    vector<string> findRelativeRanks(vector<int>& nums) {
        vector<string> res(nums.size());
        map<int, int> ma;
        for (int i = 0; i != nums.size(); ++i) {
            ma[nums[i]] = i;
        }
        int count = 1;
        for (map<int, int>::reverse_iterator it = ma.rbegin(); it != ma.rend(); ++it, ++count) {
            if (count == 1) res[it->second] = "Gold Medal";
            else if (count == 2) res[it->second] = "Silver Medal";
            else if (count == 3) res[it->second] = "Bronze Medal";
            else res[it->second] = to_string(count);
        }
        return res;
    }
};

目录

  1. 题目描述
  2. 示例
  3. 思路
  4. 代码实现
  5. 方法一:优先队列
  6. 方法二:有序映射

更多推荐文章

查看全部
  • AI 大模型通信机制:流式传输与数据封装逻辑
  • RTX 4090 实测:圣光艺苑 AI 绘画工具古典风格生成效果
  • Docker Compose 文件格式版本 3 参考指南
  • 3个步骤让你的Home Assistant界面焕然一新:智能家居UI设计全攻略
  • AMR 机器人:如何满足现代物料搬运需求
  • 基于《三国演义》的 KAG 工程实践:LLM 抽取图谱、Neo4j 入库与评测
  • 基于 Python 与 AI 的智能害虫识别系统实战
  • C++ 面向对象三大特性:继承
  • AI 产品经理面试攻略:常见问题与回答策略
  • 滑动窗口算法:找到字符串中所有字母异位词
  • Java 最新版本详细安装与配置教程
  • GitHub Copilot 学生认证排查笔记
  • 立创开源智能家居键盘SmartKB32_v2:基于ESP32-S3的蓝牙/有线双模多功能控制器设计详解
  • 3D 渲染路径详解:延时光照、正向渲染与顶点光照对比
  • Linux 编译器 gcc/g++与动态静态库详解
  • 配电房智能辅助监控系统及站端监控设备详解
  • C++ 类与对象核心知识点总结
  • Shannon:全自主 AI 渗透测试工具解析
  • OpenClaw 在 Windows 环境下基于 Node.js 与 Kimi 的部署配置教程
  • .NET 微服务架构:从 WebAPI 到 Docker 实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online