leetcode:相对名次(详解)

news2025/2/27 11:14:34

前言:内容包括-题目,代码实现,大致思路,代码解读

目录

题目:

代码实现:

大致思路:

 代码解读:

part 1:开辟返回数组

part 2:score数组的每个元素及其下标构成一个整体元素

part 3:对arr数组倒序排序(从大到小)

part 3:分配名次


题目:

给你一个长度为 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 位运动员的获奖情况。

示例 1:

输入:score = [5,4,3,2,1]
输出:["Gold Medal","Silver Medal","Bronze Medal","4","5"]
解释:名次为 [1st, 2nd, 3rd, 4th, 5th] 。
示例 2:

输入:score = [10,3,8,9,4]
输出:["Gold Medal","5","Bronze Medal","Silver Medal","4"]
解释:名次为 [1st, 5th, 3rd, 2nd, 4th] 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/relative-ranks
 

代码实现:

int cmp(const void* e1, const void* e2)
{
	return *((int*)e2) - *((int*)e1);
}

char ** findRelativeRanks(int* score, int scoreSize, int* returnSize)
{
    char** ret = (char**)malloc(scoreSize * sizeof(char*));
	int i = 0;
	for (i = 0; i < scoreSize; i++)
	{
		ret[i] = (char*)malloc(13 * sizeof(char));
	}

	//或者 int(*arr)[2] = (int(*)[2])malloc(scoreSize * sizeof( arr[0]));
    int arr[scoreSize][2];
	for (i = 0; i < scoreSize; i++)
	{
		arr[i][0] = score[i];
		arr[i][1] = i;
	}

	qsort(arr, scoreSize, sizeof(arr[0]), cmp);

	char* arr2[] = { "Gold Medal" ,"Silver Medal" ,"Bronze Medal" };

	for (i = 0; i < scoreSize; i++)
	{
		if (i < 3)
		{
			strcpy(ret[arr[i][1]], arr2[i]);
		}
		else
		{
			sprintf(ret[arr[i][1]], "%d", i + 1);
		}
	}

	*returnSize = scoreSize;
	return ret;
}

大致思路:

1 将score数组的每个元素和它的下标存放在一起,则一个元素和它的下标构成一个一维数组

   所以scoreSize个元素和其下标存放在一起,就构成scoreSize个一维数组,即一个二维数组

   二维数组的行是scoreSize,列是2

以  [10,3,8,9,4]为例:

 2  按照倒序对arr数组的每个元素(每个元素都是一个一维数组)进行排序,使用qsort函数

     排序好后,前3个元素就是前3名(下标是0,1,2)

 3 遍历排序后的arr数组,前3个元素分别对应金牌,银牌,铜牌 ,后面的元素获得的名次是它的下标+1

    由于arr数组的每个元素都是一个一维数组,这个一维数组的第二个空间存放的就是原来在score数组中的下标,那么排序后的arr数组每个元素获得的名次需要存入原下标所对应的空间中去。

 代码解读:

part 1:开辟返回数组


    char** ret = (char**)malloc(scoreSize * sizeof(char*));
	int i = 0;
	for (i = 0; i < scoreSize; i++)
	{
		ret[i] = (char*)malloc(13 * sizeof(char));
	}

 返回数组的每个元素是char*类型

每个元素都是一个字符数组,用于存储字符串

part 2:score数组的每个元素及其下标构成一个整体元素

//或者 int(*arr)[2] = (int(*)[2])malloc(scoreSize * sizeof( arr[0]));
    int arr[scoreSize][2];
	for (i = 0; i < scoreSize; i++)
	{
		arr[i][0] = score[i];
		arr[i][1] = i;
	}

score数组一个元素及其下标构成一个整体元素,这个整体元素即一个一维数组

一维数组有两个空间,第一个空间存放score,第二个空间存放原下标

共可以构成scoreSize个一维数组,即一个二维数组arr

二维数组的行是scoreSize行,列是2列

二维数组空间的开辟:

法1:可以直接定义int arr[scoreSize][2];

法2:malloc开辟

   

int(*arr)[2] = (int(*)[2])malloc(scoreSize * sizeof( arr[0]));
//二维数组的每个元素类型是一维数组,malloc会返回开辟空间的起始地址,二维数组的起始地址,即二维数组首元素的地址,即一维数组的地址,即一维数组指针

一个一维数组所占空间的大小:sizeof(数组名)

arr[i]是二维数组arr每个元素(一维数组)的数组名,数组名[i]就可以对一维数组的每个空间进行访问

part 3:对arr数组倒序排序(从大到小)

qsort(arr, scoreSize, sizeof(arr[0]), cmp);

使用qsort函数排序,比较两个元素大小的函数cmp需要自己设计

int cmp(const void* e1, const void* e2)
{
	return *((int*)e2) - *((int*)e1);//按照倒序排列
//将e1和e2强制转换成int*类型,这样便能对一维数组中的每个元素访问
//*((int*)e2)得到一维数组中的第一个元素,即分数score
}

arr的每个元素都是一维数组,我们排序的依据是比较一维数组中的第一个元素

part 3:分配名次

    char* arr2[] = { "Gold Medal" ,"Silver Medal" ,"Bronze Medal" };

	for (i = 0; i < scoreSize; i++)
	{
		if (i < 3)
		{
			strcpy(ret[arr[i][1]], arr2[i]);//金牌,银牌,铜牌的分配
		}
		else
		{
			sprintf(ret[arr[i][1]], "%d", i + 1);//普通名次的分配,名次是下标+1
		}
	}

	*returnSize = scoreSize;
	return ret;

从大到小排序后的arr数组:

 sprintf函数:将格式化的数据转成字符串

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

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

相关文章

视觉大模型DINOv2:自我监督学习的新领域

如果你对自监督学习感兴趣&#xff0c;可能听说过Facebook人工智能的DINO(无标签知识蒸馏)。我们在以前的文章中也介绍过它。DINOv2不仅是一个新版本而且带来了新的改进&#xff0c;并为判别性自监督学习设定了更高的标准。当然公司的名字也从Facebook变为了Meta。 本文将介绍…

成功打破 GPT-4 上限,新版 Claude 横空出世!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 前 OpenAI 团队成员在离职后&#xff0c;创办了 Anthropic 公司。今年 3 月份的时候&#xff0c;该公司推出一款名为 Claude 的应用&#xff0c;试图与 ChatGPT 一争高下。 一个多月过去了…

分享Python采集77个css3代码,总有一款适合您

分享Python采集77个css3代码&#xff0c;总有一款适合您 Python采集的77个css3代码下载链接&#xff1a;https://pan.baidu.com/s/13EiUDXOAZvvKmF2KGrivzA?pwdubb2 提取码&#xff1a;ubb2 两款漂亮的bootstrap分页样式 纯CSS3用户卡片设计效果 4种炫酷CSS3 loading预加…

第六十章 Unity 发布Web平台

WebGL 是一种用于在 Web 浏览器中渲染图形的 API&#xff0c;基于 OpenGL ES 图形库的功能。WebGL 1.0 大致与 OpenGL ES 2.0 功能相匹配&#xff0c;而 WebGL 2.0 大致与 OpenGL ES 3.0 功能相匹配。WebGL 构建选项允许 Unity 将内容发布为 JavaScript 程序&#xff0c;而这些…

FastDFS+Nginx - 本地搭建文件服务器同时实现在外远程访问「端口映射」(1)

大家好&#xff0c;我是晓星航。今天为大家带来的是面向对象编程相关的讲解&#xff01;&#x1f600; 文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Ngi…

ARM 处理器模式(二)

文章目录 ARM 处理器模式工作模式模式切换内核寄存器各个模式对应的内核寄存器 ARM 处理器模式 ARMv7-a 处理器共有 9 种工作模式 工作模式 User&#xff1a;用户模式&#xff0c;非特权模式&#xff0c;大部分程序运行的时候就处于此模式FIQ&#xff1a;快速中断模式&#x…

算法修炼之练气篇——练气二十二层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…

Vue列表展示计数器【第二篇】

&#x1f331; 1、vue列表展示案例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>vueDemo02列表展示</title> </head> <body> <div id"xy"><!--原始展示方式…

2023最新CleanMyMac中文版系统清理优化工具

CleanMyMac中文版功能非常的强大&#xff0c;操作简单&#xff0c;使用起来高效快捷&#xff0c;软件自身拥有一个安全数据&#xff0c;且拥有一定的规格&#xff0c;CleanMyMac中文版能够确定软件能够正确选择和清理Mac垃圾文件&#xff0c;更加安全&#xff0c;可靠。一键快速…

thinkPhP6.0安装教程图解--PHP框架安装

ThinkPhP 6.0 安装 1.环境检查 首先&#xff0c;thinkphp6.0&#xff0c;要求php的环境是7.2.5及以上的&#xff0c;所以先检查自己的php环境是否符合要求。 在cmd命令窗口中输入php -v 或者没有配置环境变量的话&#xff0c;可以在php编辑器中输出php_info()或则PHP_VERSIO…

记录一次异常:feign异常--NoSuchBeanDefinitionException: No qualifying bean of type

1、完整报错 2023-06-29 16:17:28.127 WARN 3732 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyExcep…

JetCache 使用简单案例到源码解析读这一篇就够

背景 github.com/alibaba/jet… 一、使用方法&#xff1a; 1. 创建项目— 此处使用springboot项目 2. 引入starter <dependency> <groupId>com.alicp.jetcache</groupId> <artifactId>jetcache-starter-redis</artifactId><version>2…

Servlet3.0 新特性全解

Servlet3.0新特性全解 tomcat 7以上的版本都支持Servlet 3.0 Servlet 3.0 新增特性 注解支持&#xff1b;Servlet、Filter、Listener无需在web.xml中进行配置&#xff0c;可以通过对应注解进行配置&#xff1b;支持Web模块&#xff1b;Servlet异步处理&#xff1b;文件上传AP…

DEV SIT UAT PET SIM PRD PROD常见环境英文缩写含义

一、英文缩写 英文中文 DEV development开发 SIT System Integrate Test系统整合测试&#xff08;内测&#xff09; UAT User Acceptance Test用户验收测试 PET Performance Evaluation Test性能评估测试&#xff08;压测&#xff09; SIM simulation仿真 PRD/PROD produ…

我们花一个月调研了小红书种草的新机会和增长策略

分析师&#xff1a;Jane、彬超 编辑&#xff1a;yolo 出品&#xff1a;增长黑盒研究组 *本报告为增长黑盒独立研究系列&#xff0c; 与第三方不存在任何利益关系 随着618的临近&#xff0c;小红书再次成为了品牌重要的“营销战场”。面临着经济环境的不确定性&#xff0c;想必各…

数据结构_串

目录 1. 串的定义和实现 1.1 串的定义 1.2 串的存储结构 1.2.1 定长顺序存储表示 1.2.2 堆分配存储表示 1.2.3 块链存储表示 1.3 串的基本操作 2. 串的模式匹配 2.1 简单的模式匹配算法 2.2 串的模式匹配算法——KMP算法 2.2.1 字符串的前缀、后缀和部分匹配值 2.2…

你不知道的裁员攻略:真正的离职赔偿是2N起步,不是N+1!计算赔偿金时,年终奖要计入总收入!...

最近裁员现象猖獗&#xff0c;许多人都不知道如何维护自己的合法权益&#xff0c;在和公司撕扯时屡屡被坑。一位曾经和字节撕过且成功的网友&#xff0c;友情给大家写了一份离职攻略。但要注意&#xff0c;这份攻略只针对那些守规矩的大公司&#xff0c;如果是不守规矩的小公司…

得ChatGPT者,得智能客服天下?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 在现代社会&#xff0c;高效、专业的客服服务已成为企业、组织机构竞争力的关键要素。智能客服系统应运而生&#xff0c;智能客服系统对客服的赋能作用和价值主要表现在提高效率、降低成本、优化用户体验、深度挖掘用户需求…

【综述】结构化剪枝

目录 摘要 分类 1、依赖权重 2、基于激活函数 3、正则化 3.1 BN参数正则化 3.2 额外参数正则化 3.3 滤波器正则化 4、优化工具 5、动态剪枝 6、神经架构搜索 性能比较 摘要 深度卷积神经网络&#xff08;CNNs&#xff09;的显著性能通常归因于其更深层次和更广泛的架…

QML转换(Transformation)

目录 一 QML介绍 二 QML的使用场合 三 实例演示 一 QML介绍 QML是Qt Quick的缩写&#xff0c;它是一种新型的、面向对象的、跨平台的脚本语言&#xff0c;可以用来描述用户界面或应用程序的交互逻辑。QML可以在Qt应用程序中使用&#xff0c;也可以在其他JavaScript应用程序中…