1.题目描述
给你一个长度为 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 位运动员的获奖情况
2.知识点
(1)首先创一个结果数组,和一个索引数组
(2)索引数组起到标记的作用,比如[85,92,88,76,95],
用index[i]=[i]; 让数组变成了[0,1,2,3,4]
(3)接着用自定义比较器,对index里的数字,按照分数进行比较,按从高到低排序,得到排序后的索引数组[4,1,2,0,3]
这一步比较关键
也就是Arrays.sort(index,(a,b)->Integer.compare(score[b],score[a]));
(4)然后通过一个for循环进行遍历赋值。
3.代码实现
class Solution {
public String[] findRelativeRanks(int[] score) {
int n=score.length;
String[] result=new String[n];
Integer[] index=new Integer[n];
for(int i=0;i<n;i++)
{
index[i]=i;
}
//根据分值对索引数组进行排序
Arrays.sort(index,(a,b)->Integer.compare(score[b],score[a]));
//按照升序排序
for(int i=0;i<n;i++)
{
if(i==0)
{
result[index[i]]="Gold Medal";
}
else if(i==1)
{
result[index[i]]="Silver Medal";
}
else if(i==2)
{
result[index[i]]="Bronze Medal";
}
else
{
result[index[i]]=String.valueOf(i+1);
}
}
return result;
}
}
标签:index,名次,L44,--,---,score,result,Medal,运动员
From: https://blog.csdn.net/zsysingapore/article/details/139527586