力扣打卡: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<Integer, Integer> 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<Integer,Integer> 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;
}
}