题目:506. 相对名次
方法1 排序+Map
1、思路:先对数组排序后判断名次,用Map储存成绩与名次映射的关系,以score[i]为值在map中查找对应名次储存在结果数组中。
2、算法
(1) 复制得新数组arr[ ]
(2) 排序数组arr[ ]
(3) 倒叙遍历数组arr[ ],将成绩与名次映射的关系储存在map中
(4) 在map中用score[i]查找对应的名次
3、java代码
import java.util.*;
class Solution {
public String[] findRelativeRanks(int[] score) {
String[] str =new String[]{"Gold Medal","Silver Medal","Bronze Medal"};
Map<Integer,String> map= new HashMap<Integer, String>();
//复制数组
int[] arr =new int[score.length];
for(int i=0;i< score.length;i++){
arr[i]=score[i];
}
//Arrays.sort()排序结果是升序的
Arrays.sort(arr);
//倒叙遍历数组arr,将成绩与名次映射的关系储存在map中
for(int i=arr.length-1;i>=0;i--){
//因为数组升序,所以数组中后三个元素arr.length-3~arr.length-1获奖
if(i>=arr.length-3){
map.put(arr[i],str[arr.length-1-i]);
}else {
//因为数组升序,所以数组中0~arr.length-4只能获得他们的名次编号
map.put(arr[i],Integer.toString(arr.length-i));
}
}
String[] ret = new String[score.length];
//在map中用score[i]查找对应的名次
for(int i=0;i< arr.length;i++){
ret[i]= map.get(score[i]);
}
return ret;
}
}