跳到主要内容

元素名次

相对名次

给出 N 名运动员的成绩,找出他们的相对名次并授予前三名对应的奖牌。前三名运动员将会被分别授予 “金牌”,“银牌” 和“ 铜牌”("Gold Medal", "Silver Medal", "Bronze Medal")。

(注:分数越高的选手,排名越靠前。)

示例1:

输入: [5, 4, 3, 2, 1]
输出: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]
解释: 前三名运动员的成绩为前三高的,因此将会分别被授予 “金牌”,“银牌”和“铜牌” ("Gold Medal", "Silver Medal" and "Bronze Medal").
余下的两名运动员,我们只需要通过他们的成绩计算将其相对名次即可。

方案A 计数排序

思路:首先寻找数组中最大的值(成绩最高的),创建一个 int[] array = new int[max + 1]; 的数组用来实现计数排序。array 数组的下标对应成绩,值为该成绩所在的原数组的下标。由于 array 数组的值默认为 0,所以在存储成绩的下标时,应对下标加 1,取时减 1 即可。

:::details 点击查看代码

function findRelativeRanks(score){
let countNums=[];
for(let i=0;i<score.length;i++){
countNums[score[i]]=i;
}
let number=1;
for(let i=countNums.length-1;i>=0;i--){
if(countNums[i]!=undefined){
if(number<=3){
score[countNums[i]]=["Gold Medal","Silver Medal", "Bronze Medal"][number-1];
}else{
score[countNums[i]]=number+'';
}
number++;
}
}
return score;
}

:::

性能分析: