506. 相对名次
题目描述
解题思路
- 首先使用一个哈希表,哈希表的key,value分别存放第i位运动员的得分和 i;
- 然后复制score并排序;
- 根据得分查到该运动员在score中的位置,并在该位置赋值该运动员的名次。
(结合代码分析)
代码实现
class Solution {
public String[] findRelativeRanks(int[] score) {
int n = score.length;
String[] topThree = {"Gold Medal", "Silver Medal", "Bronze Medal"}; // 前三名
String[] res = new String[n]; // 保存结果
int[] clone = score.clone(); //复制socre
Arrays.sort(clone); //对得分进行排序
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<n;i++){
map.put(score[i],i); //哈希表的key,value分别存放第i位运动员的得分和i
}
for(int i=0;i<n;i++){
if(i<3){
//n-i-1:clone排序后是递增的,所以我们从后往前
//根据得分查到该运动员在score中的位置,并在该位置赋值该运动员的名次
res[map.get(clone[n-i-1])] = topThree[i]; //前三名赋值金银铜牌
}else{
res[map.get(clone[n-i-1])] = Integer.toString(i + 1); //第4 名及以后赋值名次
}
}
return res;
}
}