Leet Code知识点总结 - 506

LeetCode 506. Relative Ranks

考点 难度
Array Easy
题目

You are given an integer array score of size n, where score[i] is the score of the ith athlete in a competition. All the scores are guaranteed to be unique.

The athletes are placed based on their scores, where the 1st place athlete has the highest score, the 2nd place athlete has the 2nd highest score, and so on. The placement of each athlete determines their rank:

The 1st place athlete’s rank is “Gold Medal”.
The 2nd place athlete’s rank is “Silver Medal”.
The 3rd place athlete’s rank is “Bronze Medal”.
For the 4th place to the nth place athlete, their rank is their placement number (i.e., the xth place athlete’s rank is “x”).
Return an array answer of size n where answer[i] is the rank of the ith athlete.

思路

这道题思路也比较简单,首先把原有的array按大小排列,再用map储存数字和对应的排名。最后用map.get(nums[i])获取每个数字的排名。
几个需要注意的点:

  1. 排序之前把nums复制一次。因为最后的结果需要按照nums的原有顺序,所以需要保留nums
  2. sort( )是按数值从小到大的顺序排列,而划分名次的时候是按从大到小的顺序
答案
public String[] findRelativeRanks(int[] nums) {
        int len = nums.length;
        int[] temp = new int[len];
        for (int i = 0; i < len; i++){
            temp[i] = nums[i];
        }
        Arrays.sort(temp);
        
        Map<Integer, String> rank = new HashMap();
        for (int i = len-1; i >= 0; i--){
            if (i == len-1) rank.put(temp[i], "Gold Medal");
            else if (i == len-2) rank.put(temp[i], "Silver Medal");
            else if (i == len-3) rank.put(temp[i], "Bronze Medal");
            else rank.put(temp[i], String.valueOf(len-i));
        }
        String[] result = new String[len];
        for (int i = 0; i < len; i++){
            result[i] = rank.get(nums[i]);
        }
        return result;
    }

Guess you like

Origin blog.csdn.net/m0_59773145/article/details/120007961