力扣打卡:506. 相对名次
解题思路要求得到名次和在对应的位置上进行标注
- TreeMap的自动排序功能
- TreeMap的 key 记录成绩,也就是 score[i]
- TreeMap的 value 记录序号,也就是 i
- 对TreeMap进行迭代遍历,取出 value,在 ans[entry.getValue] 上标注名次
注意:TreeMap的默认排序是升序
时间复杂度为 O(2*n)
代码class Solution {
public String[] findRelativeRanks(int[] score) {
// 无任何重复成绩,又要得到序号,那么想到TreeMap,所有操作的时间复杂度都是log(n)
TreeMap tree = new TreeMap<>();
int idx = 0;
String[] ans = new String[score.length];
for(int x: score) tree.put(x,idx++);
idx = 0 ;
for(Map.Entry entry :tree.entrySet()){ // TreeMap的迭代是有序的,treeMap的默认排序是从小到大的
int n = score.length-idx; // 第几名,注意不是从0开始的
switch(n){
case 1:
ans[entry.getValue()] = "Gold Medal";
break;
case 2:
ans[entry.getValue()] = "Silver Medal";
break;
case 3:
ans[entry.getValue()] = "Bronze Medal";
break;
default:
ans[entry.getValue()] = n+"";
}
idx++;
}
return ans;
}
}



