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

506. Relative Ranks 相对排名

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

雪落无声发布于 2017/2/12更新于 2026/7/1340 浏览
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生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ 算术操作符与数值运算基础
  • C++ 仿函数详解:让对象像函数一样调用
  • 2026 年 3 月 GESP C++ 一级真题:数字替换
  • 使用 VS Code + Git 高效管理 Python 学习记录
  • OpenClaw 龙虾机器人本地部署与配置指南
  • MyBatisPlus 与 Thymeleaf 全栈分页整合方案
  • 网络安全行业岗位缺口分析:基于美国市场数据的观察
  • StructBERT-Large 单句对多句批量检索开发指南
  • 基于 OpenClaw 与 Ollama 的本地 AI 智能体搭建指南
  • Android 工程师面试准备指南:核心知识点与实战技巧
  • VS Code 前端开发 AI 工具对比:Copilot、通义灵码、iFlyCode 与 Trae
  • Github 2FA 认证失效解决方案及账号恢复指南
  • 使用 Rust 与 GLM-5 构建高性能 AI 翻译 CLI 工具
  • IntelliJ IDEA GitLab 登录失败:检查 API Token 或版本兼容性
  • Android Jetpack ViewBinding 视图绑定详解与封装优化
  • 在 Python 和 REST API 中使用 AutoGen Studio 导出的团队配置
  • 算法实战:Z 字形变换与外观数列模拟解法
  • Ollama 本地大语言模型部署与使用指南
  • Vue 3 实战:10 个提升开发体验的核心技巧
  • uv 虚拟环境管理:venv 创建、激活与 Python 版本指定

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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