506. 相对名次

力扣打卡: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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值