目录
一、题目描述
给你一个长度为 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] 。
二、运行结果
三、解题思路
定义一个排序的map,将分数数组中的每个分数(key)和对应的下标(value)加入到这个map中,完成对分数的升序排序。
然后按序遍历这个map,对于这个map的第一个分数,就是最后一名,它所在数组中的位置就是value值对应的下标,所以只需要将结果数组中的这个位置设置为最后一个编号即可。依次类推,map中的第二个值就是倒数第二名,第三个值就是倒数第三名……依次设置结果数组中的值。
四、代码
class Solution {
public String[] findRelativeRanks(int[] score) {
int len = score.length;
String[] ans = new String[len];
Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
for(int i=0; i<len; ++i){
map.put(score[i], i); //将每个分数和对应的下标存到map中
}
int index = len; //map升序,名次从后往前
for(Integer val : map.values()){
if(index > 3)
ans[val] = String.valueOf(index);
else if(index == 3)
ans[val] = "Bronze Medal";
else if(index == 2)
ans[val] = "Silver Medal";
else
ans[val] = "Gold Medal";
index--;
}
return ans;
}
}