【LeetCode】第31天 - 506. 相对名次

x33g5p2x  于2021-12-06 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(182)

题目描述

解题思路

  • 首先使用一个哈希表,哈希表的key,value分别存放第i位运动员的得分和 i;
  • 然后复制score并排序;
  • 根据得分查到该运动员在score中的位置,并在该位置赋值该运动员的名次。
    (结合代码分析)

代码实现

class Solution {
    public String[] findRelativeRanks(int[] score) {
        int n = score.length;
        String[] topThree = {"Gold Medal", "Silver Medal", "Bronze Medal"};   // 前三名

        String[] res = new String[n];       // 保存结果

        int[] clone = score.clone();        //复制socre

        Arrays.sort(clone);                 //对得分进行排序
        Map<Integer,Integer> map = new HashMap<>();

        for(int i=0;i<n;i++){
            map.put(score[i],i);            //哈希表的key,value分别存放第i位运动员的得分和i
        }
        for(int i=0;i<n;i++){
            if(i<3){
                //n-i-1:clone排序后是递增的,所以我们从后往前
                //根据得分查到该运动员在score中的位置,并在该位置赋值该运动员的名次
                res[map.get(clone[n-i-1])] = topThree[i];       //前三名赋值金银铜牌
            }else{
                res[map.get(clone[n-i-1])] = Integer.toString(i + 1);       //第4 名及以后赋值名次
            }
        }

        return res;
    }
}

相关文章