博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode-506-Relative Ranks
阅读量:5887 次
发布时间:2019-06-19

本文共 2303 字,大约阅读时间需要 7 分钟。

题目描述:

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".

Example 1:

Input: [5, 4, 3, 2, 1]Output: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]Explanation: The first three athletes got the top three highest scores, so they got "Gold Medal", "Silver Medal" and "Bronze Medal". For the left two athletes, you just need to output their relative ranks according to their scores.

 

Note:

  1. N is a positive integer and won't exceed 10,000.
  2. All the scores of athletes are guaranteed to be unique.

 

要完成的函数:

vector<string> findRelativeRanks(vector<int>& nums) 

 

说明:

1、这道题给定一个vector,存放不同数值的分数,比如[2,4,3,5,1],输出是[“4”,“silver medal”,“bronze medal”,“gold medal”,“5”]。前三名比较特殊,后面输出数字的次序。

2、传统思路快速处理,如下:

先对给定vector排序,然后迭代一遍排序后的vector,建立每个数跟排序的对应表。

最后对原本给定的vector,迭代一遍,输出每个数对应的次序,1/2/3名特殊处理。

代码如下:

vector
findRelativeRanks(vector
& nums) { vector
nums1=nums;//存储一份副本 sort(nums.begin(),nums.end(),greater
());//降序排列,改变nums的排序 map
m1;//建立数值和次序的对应表 for(int i=0;i
res; for(int i=0;i

上述代码十分直观明了,非常暴力的手段,可想而知实测……

23ms,beats 22.36% of cpp submissions。

 

3、改进:

我们先看看哪些步骤是必须的。排序是必须的,因为最后要输出每个数值的次序。建立副本是必须的,因为排序必然改变原来的vector。

那我去掉建立map这个过程?去掉之后比如原本是[2,4,3,5,1],排完序是[5,4,3,2,1],我要找到5所在位置,更新值为"gold medal"?但这样做就是一个双重循环了。我们建立map,之后再插入也不过是两个单重循环。

我们在做排序的时候可不可以记住这个数的位置,比如[2,4,3,5,1]我们简化成[0,1,2,3,4],然后降序排列成[5,4,3,2,1],其实按照位置来说也就是[3,1,2,0,4]。这样我们记住了大小,第三个数最大,第一个数第二大……也记住了它们的位置。

这是一种可以参考的方法,注意看下这部分的代码实现。

代码如下:

   vector
findRelativeRanks(vector
& nums) { vector
rank; for(int i=0; i
nums[b];});//按照原本数值降序排列 vector
ranks(nums.size());//最终要返回的vector for(int i=3; i
0) ranks[rank[0]] = "Gold Medal";//边界情况 if(nums.size() > 1) ranks[rank[1]] = "Silver Medal"; if(nums.size() > 2) ranks[rank[2]] = "Bronze Medal"; return ranks; }

上述代码来源于leetcode用户@kevin36,实测13ms,beats 92.55% of cpp submissions。

转载于:https://www.cnblogs.com/chenjx85/p/8971921.html

你可能感兴趣的文章
使用eclipse Maven插件创建一个web project
查看>>
我的友情链接
查看>>
成熟的标志
查看>>
慢慢的才知道
查看>>
ubuntu12.04TLS安装CodeBlocks
查看>>
待看博客
查看>>
加解密技术基础
查看>>
nginx和php-fpm优化
查看>>
分享一个zookeeper批量启动脚本
查看>>
mysql 遇到问题
查看>>
测试系统磁盘预读对PostgreSQL性能的影响
查看>>
使用过的终端命令汇集
查看>>
博客群发软件--用 Windows Live Writer完美发布新浪、网易、blogcn、blogbus、cnbl
查看>>
dubbo 安装部署Windows
查看>>
eclipse 导入maven 父子项目
查看>>
maven基本要点
查看>>
通过 KVM+virt-manager配置双屏虚拟机(两套键盘。鼠标)
查看>>
Slmgr.vbs参数使用方法[转自windows10操作系统]
查看>>
打开远程桌面命令
查看>>
LAMP架构(nginx安装,默认虚拟主机,用户认证,域名重定向,nginx配置文件详解)...
查看>>