Leet Code知识点总结 - 506

LeetCode 506. Relative Ranks

考点难度
ArrayEasy
题目

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;
    }
探险家小扣的行动轨迹,都将保存在记录仪中。expeditions[i] 表示小扣第 i 次探险记录,用一个字符串数组表示。其中的每个「营地」由大小写字母组成,通过子串 -> 连接。例:"Leet->code->Campsite",表示到访了 "Leet"、"code"、"Campsite" 三个营地。expeditions[0] 包含了初始小扣已知的所有营地;对于之后的第 i 次探险(即 expeditions[i] 且 i > 0),如果记录中包含了之前均没出现的营地,则表示小扣 新发现 的营地。 请你找出小扣发现新营地最多且索引最小的那次探险,并返回对应的记录索引。如果所有探险记录都没有发现新的营地,返回 -1。注意: 大小写不同的营地视为不同的营地; 营地的名称长度均大于 0。用python实现。给你几个例子:示例 1: 输入:expeditions = ["leet->code","leet->code->Campsite->Leet","leet->code->leet->courier"] 输出:1 解释: 初始已知的所有营地为 "leet" 和 "code" 第 1 次,到访了 "leet"、"code"、"Campsite"、"Leet",新发现营地 2 处:"Campsite"、"Leet" 第 2 次,到访了 "leet"、"code"、"courier",新发现营地 1 处:"courier" 第 1 次探险发现的新营地数量最多,因此返回 1。示例 2: 输入:expeditions = ["Alice->Dex","","Dex"] 输出:-1 解释: 初始已知的所有营地为 "Alice" 和 "Dex" 第 1 次,未到访任何营地; 第 2 次,到访了 "Dex",未新发现营地; 因为两次探险均未发现新的营地,返回 -1
04-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值