每日一题 【每日一题】相对排名问题 -Python-20211001

Jack · 2021年10月01日 · 最后由 lework 回复于 2022年01月16日 · 49 次阅读
本帖已被设为精华帖!
  1. 问题描述: 全运会期间,根据 N 名运动员得分情况,找到相对等级和获得最高分的 3 人,分别获得金、银、铜牌。N 是正整数,且不超过 10000。运动员成绩默认唯一。
  2. 问题示例: 输入: [5, 4, 3, 2, 1] 输出: ["金牌", "银牌", "铜牌", "4", "5"] 注: 前三名成绩较高,获得金银铜,对于后两位运动员,只输出相对等级 (排名),第四、第五名
Jack 将本帖设为了精华贴 10月01日 18:37

参考代码:

class Source:
    def runFunc(self, nums):
        score = {}
        for i in range(len(nums)):
            score[nums[i]] = i
        sortScore = sorted(nums, reverse=True)
        answer = [0] * len(nums)
        for i in range(len(sortScore)):
            print(i)
            res = str(i + 1)
            if i == 0:
                res = "Gold medal"
            if i == 1:
                res = "Silver medal"
            if i == 2:
                res = "Bronze medal"
            answer[score[sortScore[i]]]  = res
        return answer
package main

import (
    "fmt"
    "sort"
    "strconv"
)

func main() {
    /*
        问题描述: 全运会期间,根据 N 名运动员得分情况,找到相对等级和获得最高分的 3 人,分别获得金、银、铜牌。N 是正整数,且不超过 10000。运动员成绩默认唯一。
        问题示例: 输入: [5, 4, 3, 2, 1] 输出: ["金牌", "银牌", "铜牌", "4", "5"] 注: 前三名成绩较高,获得金银铜,对于后两位运动员,只输出相对等级 (排名),第四、第五名
    */
    nums := []int{5, 4, 3, 1, 2}
    m := make(map[string]int)
    numsLen := len(nums)
    answer := make([]string, numsLen)

    for i := 0; i < numsLen; i++ {
        m[strconv.Itoa(nums[i])] = i
    }
    sort.Sort(sort.Reverse(sort.IntSlice(nums)))

    for i := 0; i < numsLen; i++ {
        res := strconv.Itoa(i + 1)
        if i == 0 {
            res = "金牌"
        } else if i == 1 {
            res = "银牌"
        } else if i == 2 {
            res = "铜牌"
        }
        answer[m[strconv.Itoa(nums[i])]] = res

    }
    fmt.Println(answer)
}
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册