leetcode506.相对名次

news2025/1/10 1:27:19

题目描述跳转leetcode详情

给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都 互不相同 。
运动员将根据得分 决定名次 ,其中名次第 1 的运动员得分最高,名次第 2 的运动员得分第 2 高,依此类推。运动员的名次决定了他们的获奖情况:
名次第 1 的运动员获金牌 “Gold Medal” 。
名次第 2 的运动员获银牌 “Silver Medal” 。
名次第 3 的运动员获铜牌 “Bronze Medal” 。
从名次第 4 到第 n 的运动员,只能获得他们的名次编号(即,名次第 x 的运动员获得编号 “x”)。
使用长度为 n 的数组 answer 返回获奖,其中 answer[i] 是第 i 位运动员的获奖情况。在这里插入图片描述

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/relative-ranks
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

做题之前先了解下堆的相关基础概念

什么是堆?

堆是一种基于完全二叉树实现的抽象数据结构,具有以下特点:

  • 堆可以是最大堆(父节点的值大于等于其子节点的值),也可以是最小堆(父节点的值小于等于其子节点的值)。
  • 堆中每个节点的值都满足堆的性质,即任何一个父节点都比其子节点大(或小)。
  • 堆通常使用数组实现,其中任何一个节点的下标为i,则其父节点的下标为(i-1)/2,左子节点的下标为2i+1,右子节点的下标为2i+2。
  • 堆支持插入和删除操作,插入操作会使堆重新满足堆的性质,删除操作通常是删除最大值或最小值的操作,在最大堆中,删除操作会删除堆顶元素(即最大值),并重新调整堆以满足堆的性质。

堆是一种非常重要的数据结构,常见的应用包括排序算法(如堆排序、优先队列等)和图算法(如最短路径算法、最小生成树算法等)的优化。

优先队列

PriorityQueue(优先队列)是一种基于优先级堆的队列数据结构,具有以下特点:

  • 内部通过堆实现,堆的根节点是队列中最高或最低的元素(取决于使用的比较器或默认的自然排序)。
  • 插入元素时,会根据它们的优先级自动进行排序。默认情况下,元素的顺序按照其自然顺序确定,也可以通过提供一个自定义的Comparator实现自定义排序。
  • 可以进行快速的查找、删除最高/最低元素,并支持常用的队列操作,如插入、删除和查找操作。
  • PriorityQueue允许重复元素,但不保证它们存储的顺序。
  • PriorityQueue不是线程安全的,如果需要在多个线程中使用,需要进行同步处理。

解题

本来是想做每日一题1439.有序矩阵中的第 k 个最小数组和的,但是真的是毫无头绪,看了题解说是需要使用堆来完成(我真的不知道怎么去解决), 决定由基础做起,边找到了简单的leetcode506.相对名次来开始学习堆的使用。

  • 解题思路
  1. 创建HashMap来记录分数和下标之间的关系
  2. 创建一个最大堆,用于对给定的分数进行排序,从而确定每个开放者的名次。由于我们需要为每个运动员分配名次,所以我们还需要知道原始下标。在完成排序后,我们可以使用映射表来找到与给定分数对应的原下标,并将相应的奖牌或编号分配给该运动员。
class Solution {
    public String[] findRelativeRanks(int[] score) {
        String[] res = new String[score.length];

        // 1. 创建map来记录分数和下标的关系
        HashMap<Integer, Integer> map = new HashMap<>();
        // 向map里面加入值
        for(int i = 0; i< score.length; i++){
            map.put(score[i], i);
        }

        // 2. 创建最大堆,用来排序
        PriorityQueue<Integer> queue = new PriorityQueue<>((a,b) -> b-a);
        // 添加数据
        for(int s : score){
            queue.offer(s);
        }

        // 遍历最大堆,取到
        int i = 0;
        while(!queue.isEmpty()){
            int curScore = queue.poll();
            // 取到该分数对应的下标
            int index = map.get(curScore);
            
            if(i == 0){
                res[index] = "Gold Medal";
            }else if(i == 1){
                res[index] = "Silver Medal";
            }else if(i == 2){
                res[index] = "Bronze Medal";
            }else{
                res[index] = String.valueOf(i+1);
            }
            i++;
        }
        return res;
    }

}

使用最大堆解决!
在这里插入图片描述

ps:PriorityQueue<Integer> queue = new PriorityQueue<>();默认是从小到大的排序的,在括号中提供一个比较器可以覆盖默认行为,这里 (a, b) -> b - a 中的 lambda 表达式就表示用 b - a 的结果进行比较,以逆序排序。其值为正(例如 b > a)时,会返回 1,保证 b 放在 a 前;值为负时会返回 -1,保证 a 放在 b 前。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/578934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day1 -- 资料库管理系统DBMS

学习目标&#xff1a; 了解什么是Mysql 如何安装Mysql 学习内容&#xff1a; 资料库概念资料库管理系统概念资料库管理系统分类SQL是什么安装Mysql启动Mysql并建立一张测试表格 正文部分 资料库 比如你喜欢摘抄优美的词句&#xff0c;那些优美的词句就是一种文字资料&#xf…

香橙派4和树莓派4B构建K8S集群实践之六:App服务部署

目录 1. 说明 1.1 关于PHPNginx体系的WebApp&#xff0c;这里将实践两种部署模式&#xff1a; 1.2 配置清单 2. PHPNginx体系的WebApp部署 2.1 单节点多容器模式A 2.1.1 准备工作 2.2.2 部署 2.2.3 访问效果 ​编辑 2.2 多节点单容器模式B 2.2.1 准备工作 2.2 配置…

笔记 | FastAPI创建新项目

当使用FastAPI创建项目时&#xff0c;首先需要安装FastAPI和其依赖项。可以使用pip来安装它们。请确保已经安装了Python和pip。 创建项目文件夹并进入该文件夹&#xff1a; mkdir myproject cd myproject创建并激活一个新的Python虚拟环境&#xff08;可选&#xff0c;但强烈…

虚拟机扩容

文章目录 虚拟机扩容扩容背景软件版本操作步骤1、VM上修改磁盘信息2、在系统中挂载磁盘(1) 使用命令查看磁盘状态(2) 通过命令查看到新磁盘的分区(3) 然后对新加的磁盘进行分区操作(4)重启虚拟机(5) 再次用以下命令查看到磁盘当前情况(6) 查看卷组名(7) 初始化刚刚的分区(8) 将…

MongoDB入门

mongodb与sql术语对应关系 SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引 对应关系图例

Microsoft Edge有哪些你不知道却超级好用的插件?(Microsoft Edge功能测评)

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:对Edge浏览器的简单测评,分享一些自己在使用好用的插件. 目录…

阿里系文生图(PAI+通义)

PAI-Diffusion模型来了&#xff01;阿里云机器学习团队带您徜徉中文艺术海洋 - 知乎作者&#xff1a;汪诚愚、段忠杰、朱祥茹、黄俊导读近年来&#xff0c;随着海量多模态数据在互联网的爆炸性增长和训练深度学习大模型的算力大幅提升&#xff0c;AI生成内容&#xff08;AI Gen…

Ae 效果详解:3D 摄像机跟踪器

Ae菜单&#xff1a;效果/透视/3D 摄像机跟踪器 Effects/Perspective/3D Camera Tracker 使用 3D 摄像机跟踪器 3D Camera Tracker效果可自动分析视频&#xff0c;以便提取摄像机运动和 3D 场景数据。然后&#xff0c;可以在 2D 素材的基础上正确合成 3D 元素。 提示&#xff1a…

基于DataX的海量时序数据迁移实战:从MySQL到TDengine3.x

背景 MySQL 数据库中&#xff0c;设备历史数据单表过亿&#xff0c;如何快速、低成本地迁移到 TDengine3.x 中&#xff1f; 从标题可以看出&#xff0c;我们使用的数据迁移/同步工具是 DataX &#xff0c;数据源&#xff08; Source &#xff09;为传统的关系型数据库 MySQL …

Yarn学习笔记

Apache Hadoop YARN &#xff08;Yet AnotherResource Negotiator&#xff0c;另一种资源协调者&#xff09;是一种新的 Hadoop 资源管理器&#xff0c;它是一个通用资源管理系统&#xff0c;可为上层应用提供统一的资源管理和调度&#xff0c;它的引入为集群在利用率、资源统一…

全面SOA化的电子电气架构是什么样?

交流群 | 进“传感器群/滑板底盘群/汽车基础软件群/域控制器群”请扫描文末二维码&#xff0c;添加九章小助手&#xff0c;务必备注交流群名称 真实姓名 公司 职位&#xff08;不备注无法通过好友验证&#xff09; 作者 | 张萌宇 在汽车产业向智能化转型的过程中&#xff0c…

《C++程序设计原理与实践》笔记 第18章 向量和数组

本章将介绍如何拷贝以及通过下标访问向量。为此&#xff0c;我们讨论一般的拷贝技术&#xff0c;并考虑向量与底层数组表示之间的关系。我们将展示数组与指针的关系及其使用引发的问题。我们还将讨论对于每种类型必须考虑的五种基本操作&#xff1a;构造、默认构造、拷贝构造、…

C++中queue的用法(超详细,入门必看)

博主简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的人。 博主主页&#xff1a;陈童学哦 所属专栏&#xff1a;CSTL 前言&#xff1a;Hello各位小伙伴们好&#xff01;欢迎来到本专栏CSTL的学习&#xff0c;本专栏旨在帮助大家了解…

轩辕:首个千亿级中文金融对话模型

背景 目前开源的大语言模型或多或少存在以下痛点&#xff1a; 缺少专门针对中文进行优化过的的大语言模型。 支持中文的开源模型的参数规模偏小&#xff0c;没有超过千亿。比如清华和智谱AI的ChatGLM-6B目前只开源了6B参数模型&#xff0c;盘古alpha也只开源了13B的模型。 支…

杨立昆:科学之路读书笔记1

杨立昆&#xff1a;科学之路读书笔记1 前言科学之路1读书缘由靠省钱&#xff0c;是混不出名堂的AI趣事话题交流 一起学AI系列博客&#xff1a;目录索引 前言 在贝尔实验室&#xff0c;靠节省开支&#xff0c;是无法混出名堂的。——《科学之路》 五一假期读的多&#xff0c;写的…

毫米波雷达点云 DBSCAN聚类算法

毫米雷达点云 DBSCAN聚类算法 聚类的目的聚类算法分类原型聚类层次聚类密度聚类 DBSCAN聚类算法原理相关定义算法流程以及伪代码DBSCAN算法优缺点DBSCAN参数选择聚类衡量指标 DBSCAN算法仿真DBSCAN代码DBSCAN算法对毫米波雷达点云数据进行聚类 聚类的目的 聚类的目的是将一组数…

认识http协议---3

hi,大家好,今天为大家带来http协议的相关知识 &#x1f347;1.http状态响应码 &#x1f347;2.构造http请求 1.直接在地址栏里输入一个URL 2.html的一些特殊标签,触发get请求 3.提交form表单,可以触发get请求和post请求 4.使用ajax &#x1f347;3.再次谈同步和异步 &#x1f3…

spark sql(四)物理计划解析

1、流程解析 在该系列第二篇文章中介绍了spark sql整体的解析流程&#xff0c;我们知道整体的sql解析分为未解析的逻辑计划&#xff08;Unresolved LogicalPlan&#xff09;、解析后的逻辑计划&#xff08;LogicalPlan&#xff09;、优化后的逻辑计划&#xff08;Optimized Lo…

HDFS学习笔记

HDFS1.0 1 什么是HDFS&#xff1f; HDFS的全称是&#xff1a;Hadoop DistributeFiles System&#xff0c;分布式文件系统。 在整个Hadoop技术体系中&#xff0c;HDFS提供了数据分布式存储的底层技术支持。 HDFS 由三个组件构成&#xff1a;NameNode&#xff08;NN&#xff…

排序算法:堆排序

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下栈和队列方面的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; 数据结构与算法专栏&#xff1a;数据结构与算法 个 人 …